(转+积累)SQL charindex, substring, replace, ISNUMERIC ,datalength,
CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下:CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
接下来,我们看这个CHARINDEX命令:
CHARINDEX('7.0', 'Microsoft SQL Server 2000')
在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。
注,charindex('sss',[column])和charindex('sSs',[column])一样,因为它不区分大小写.
SQL SUBSTRING
SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同的资料库中不完全一样:
- MySQL: SUBSTR(), SUBSTRING()
- Oracle: SUBSTR()
- SQL Server: SUBSTRING()
最常用到的方式如下 (在这里我们用SUBSTR()为例):
SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始的字元。请注意,这个语法不适用于SQL Server上。
SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字元。
测试于SQL SERVER substring, datalength
declare @DD varchar(30)
set @DD=''
select @DD=AddTime from [user] where id=1124
select @DD
select substring(@DD,3,datalength(@DD)-2)
运行结果:
08-12-09
-12-09
注,SQL SERVER中 substring需要三个参数(str,pos,len), datalength()这个和len()有点像,具体区别需要自行找寻.
REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。
语法REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )
'string_expression1'
待搜索的字符串表达式。string_expression1 可以是字符数据或二进制数据。
'string_expression2'
待查找的字符串表达式。string_expression2 可以是字符数据或二进制数据。
'string_expression3'
替换用的字符串表达式。string_expression3 可以是字符数据或二进制数据。
返回类型如果 string_expression(1、2 或 3)是支持的字符数据类型之一,则返回字符数据。如果 string_expression(1、2 或 3)是支持的 binary 数据类型之一,则返回二进制数据。
示例下例用 xxx 替换 abcdefghi 中的字符串 cde。
SELECT REPLACE('abcdefghicde','cde','xxx') GO
下面是结果集:
------------ abxxxfghixxx (1 row(s) affected)
ssql="update shopdict set content =replace(content,'х','×')" sql="Update xh_skArticle Set title = replace(title,'广广','广告') where id="&id
ISNUMERIC
用ISNUMERIC函数
确定表达式是否为一个有效的数字类型。
例 select max(cast(主键 as numeric)) from 表 where isnumeric(主键)=1
其它函数:
left()
right()
例
select left('sfswss',2)
sf
select right('sfswss',2)
ss
截断空格,没有trim()。
ltrim()
rtrim()
例ltrim(rtrim(' sss '))='sss'