sqlserver表達式
1. sqlserver拆分長欄位。正則表達式
([\s\S]*?)(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})
正則可以這樣寫
拆分的話
在代碼裡面做會方便一些吧
2. SQL語句有何錯誤,一直報錯 缺少表達式
親,VSG.FEE_END_TIME>='2013-07-01'這個不能這樣寫,
如果是oracle需要這樣寫VSG.FEE_END_TIME>to_ddate('2013-07-01','yyyy-mm-dd')
sqlserver也要做類似的轉換,不記得怎麼轉了,自己查查
3. sqlserver 獲取一個表達式的多個返回值
前者是一個變數,後者是一個集合,你是想把一個集合的值放進一個變數中去?
可以考慮直接把集合返回給外部應用程序~
4. SqlServer函數的系統函數
newid 無參數
返回一個GUID(全局唯一表示符)值
例如:select newid()
返回:2E6861EF-F4DB-4FFE-86EB-637482FE982J2
isnumeric (任意表達式)
判斷表達式是否為數值類型或者是否可以轉換成數值。
是:返回1,不是:返回0
例如:select isnumeric(1111) 返回 1
select isnumeric('123rr') 返回 0
select isnumeric('123') 返回 1
isnull (任意表達式1,任意表達式2)
如果任意表達式1不為NULL,則返回它的值;否則,在將任意表達式2的類型轉換為任意表達式1的類型(如果這兩個類型不同)後,返回任意表達式2的值。
例如:select isnull(null,N'沒有值') 返回 沒有值
select isnull(N'具體的值',N'沒有值') 返回 具體的值
isdate (任意表達式)
確定輸入表達式是否為有效日期或可轉成有效的日期;
是:返回1,不是:返回0
例如:select isdate(getdate()) 返回1
select isdate('2013-01-02') 返回1
select isdate('198') 返回0
5. 用sqlserver建立一張表,如何利用正則表達式查詢
Sql server不支持正則,如果是Sql2005以上的版本,可以用Dotnet的託管代碼來實現,參考:
http://www.cnblogs.com/chenxizhang/archive/2011/05/27/2060319.html
6. sqlserver可以使用向javascript那樣的正則表達式么
sql server語法中不能直接使用正則表達式,最多隻能夠模糊查詢:
% 包含零個或更多字元的任意字元串。
_ 任何單個字元。
[ ] 指定范圍(例如 [a-f])或集合(例如 [abcdef])內的任何單個字元。
[^] 不在指定范圍(例如 [^a - f])或集合(例如 [^abcdef])內的任何單個字元
7. sqlserver check約束 表達式如何寫只能是電子設備,機械設備,,
check xx in(電子設備,機械設備,........)
其中xx為屬性名
check(dtime<=now())
其中當前時間用now()函數獲得,這是sqlserver中的獲得系統時間的函數。不能晚於當前時間,也就是要比當前時間要小,dtime為屬性名。
8. 如何在SQL Server中使用正則表達式
sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。
1、regexp_like:
regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:
'c'
說明在進行匹配時區分大小寫(預設值);
'i'
說明在進行匹配時不區分大小寫;
'n'
(.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行、
'm'
字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置、
示例:
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$');
可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$','i')
則可以查找ename為Arwen的行記錄。
2、regexp_instr:
REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[,
match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數
INSTR(),參數相關:
'start'
開始查找的位置;
'occurrence'
說明應該返回第幾次出現pattern的位置;
'return_option'
說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後
的字元的位置;
'match_option'
修改默認的匹配設置.與regexp_like裡面的相同.
示例:
DECLARE
V_RESULT
INTEGER
;
BEGIN
SELECT
REGEXP_INSTR('hello
world','o',1,1,0)
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結果為5,即字母o第一個次出現的位置。
如果regexp_instr('hello
world','o',1,1,n)其中n為除0之外的整數。比如1,3。則結果為6.表示第一次出現字母o的後面一個字元的位置。
如果regexp_instr('hello
world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.
3、regexp_replace:
REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[,
match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數
REPLACE(),參數同REGEXP_INSTR函數
示例:
DECLARE
V_RESULT
varchar2(90);
BEGIN
SELECT
REGEXP_REPLACE('hello
world','o','x',1,1)
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;
結果為hellx
world.
如果REGEXP_REPLACE('hello
world','o','x'),則結果為hellx
wxrld.
如果
REGEXP_REPLACE('hello
world','o','x',1,2)則結果為hello
wxrld.
4、regexp_substr:
REGEXP_SUBSTR(x,pattern[,start[,occurrence[,
match_option]]])用於在x中查找pattern並返回。可以參考字元串函數
SUBSTR(),參數同REGEXP_INSTR函數.
例如:
DECLARE
V_RESULT
VARCHAR2(255);
BEGIN
SELECT
REGEXP_SUBSTR('hello
world','l{2}')
INTO
V_RESULT
FROM
DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END
;
結果為ll
查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。
9. sqlserver中正則表達式和分組查詢
使用vbscript 或者是frameword程序集向SqlServer資料庫中添加一個正則表達式函數,就可以滿足你的需求了嘛。
vbscript 函數(需要SqlServer運行環境中vbscript 庫)
CREATE function [dbo].[RegexMatchFirst]
(
@source ntext, --原字元串
@regexp varchar(1000), --正則表達式
@global bit = 1, --是否是全局替換
@ignoreCase bit = 0 --是否忽略大小寫
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @objMatch INT
declare @matchcount INT
declare @command varchar(50)
declare @result varchar(5000)
exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @global
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'execute', @objmatch OUTPUT, @source
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
EXEC @hr= sp_OAGetProperty @objmatch, 'count', @matchcount OUT
IF @hr <> 0 or @objmatch = 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
set @command = 'item(0).Value'
EXEC @hr= sp_OAGetProperty @objmatch, @command, @result OUT
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end
return @result
end
framework運行時程序集:
打開 Microsoft Visual Studio,創建一個sqlserver 資料庫資料庫項目,在項目中按照SqlServer方式創建一個正則表達式匹配函數,然後編譯部署到你的SqlServer資料庫中。
這個時候刷新資料庫的可編程性-->函數 --> 標量值函數就會看到你在Microsoft Visual Studio中創建的自定義函數了。
10. SqlServer常用函數
1、CONVERT()
函數
?
1
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length)
規定目標數據類型(帶有可選的長度)。data_to_be_converted
含有需要轉換的值。style
規定日期/時間的輸出格式。
可以使用的
style
值:點擊打開鏈接
2、DATEADD()
函數
點擊打開鏈接
3、CAST()
函數
?
1
2
Syntax
for
CAST:
CAST
(
expression
AS
data_type
[
(
length
)
]
)
expression
任何有效的表達式。
data_type
目標數據類型。
這包括
xml、bigint
和
sql_variant。
不能使用別名數據類型。
length
指定目標數據類型長度的可選整數。
默認值為
30。
CONVERT()
函數與CAST()
函數詳細信息:點擊打開鏈接