CharIndex
1:CharIndex語法: CharIndex(expression1,expression2[,start_location])
2:參數 expression1 一個表達式,其中包含要查找的字符的序列。expression1是一個字符串數據類別的表達式。 expression2 一個表達式,通常是一個為指定序列搜索的列。expression2屬於字符串數據類別. start_location 開始在expression2中搜索expression1時的字符位置。如果start_location未被指定、是一個負數或零,則將從espression2的開頭開始搜索。start_location可以是bigint類型。
3:返回類型如果expression2的數據類型為varchar(max),nvarchar(max)或varbinnary(max),則為bigint,否則為int。
4:備注如果在expression2內找不到expression1,則charindex返回0. charindex將根據輸入的排序規則執行比較操作。若要以指定排序規則進行比較,則可以使用collate將顯式排序規則應用於輸入值。返回的開始位置從1開始,而非從0開始。
5:例子
select charindex('A','BADF',1) :2
select charindex('A','BADF',0) :2
select charindex('A','BADF',2) :2
select charindex('A','BADF',3) :0
select charindex('G','BADF',3) :0
二、substring
1、語法
substring(expression,start,length);
2、參數
expression
是字符串、二級制字符串、文本、圖像、列或包含列的表達式。不要使用包含聚合函數的表達式。
start
指定字符串開始位置的整數。start可以為bigint類型。
length
一個整數,指定要返回的expression的字符數或字節數。如果length為負,則會返回錯誤。length可以是bigint類型。
3.備注
必須以字符數指定使用ntext、char或varchar數據類型的偏移量(start和length)。必須以字節數指定使用text、image、binary或varbinary等數據類型的偏移量。
4、例子:
select substring('GXS',-1,3) :G
select substring('GXS',-1,2) :NULL
select substring('GXS',0,1) :NULL
select substring('GXS',1,1) :G
select substring('GXS',1,2) :GX
SubString和CharIndex結合使用
select substring('A,B,C,D',0,charindex(',','A,B,C,D',0))
整數除整數后,如果最后是整數,說明數據正確,找出錯誤的數據(找出有小數點的數據)
SELECT PMX.DJBH,SP.SPDM,PD.BYZD7,PMX.SL,SP.CUST_SPBZGG,CONVERT(FLOAT,PMX.SL)/CONVERT(FLOAT,SP.CUST_SPBZGG) ,CHARINDEX('.',CONVERT(NVARCHAR(60),CONVERT(FLOAT,PMX.SL)/CONVERT(FLOAT,SP.CUST_SPBZGG)),0) FROM pfjrdmx PMX LEFT JOIN PFJRD PD ON PMX.DJBH = PD.DJBH LEFT JOIN dbo.SHANGPIN SP ON PMX.SPDM = SP.SPDM WHERE PD.BYZD7 = '004' AND SP.CUST_SPBZGG!=1 --AND CHARINDEX('.',CONVERT(NVARCHAR(60),CONVERT(FLOAT,PMX.SL)/CONVERT(FLOAT,SP.CUST_SPBZGG)),0)>0 AND CHARINDEX('.',CONVERT(NVARCHAR(60),CONVERT(FLOAT,PMX.SL)/CONVERT(FLOAT,SP.CUST_SPBZGG)),0)!='0'