? ? ? ? ? ? 这次的程序涉及到获取数据库中最大单号,又是按类别划分的,需要对传入参数进行截取操作,搜索发现sqlserver 提供的函数好是强大,在写程序过程中用到以下几个DataLength 与len,Patindex,stuff,replicate,left,right;
? ? ? ? ? ? 以前经常只是用到len 这个函数,知道是获取字符串长度,偶然看到DataLength 也是获取字符串长度,好奇心驱使吧,就查了一下
? ? ? ? ? ?下面看一下官方解释:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??DataLength ? 返回用于表示任何表达式的字节数,Null 的 ?DataLength ?的结果是NULL.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? len ? ? ? ?返回字符表达式中的字符数,如果字符串中包含前导空格和尾随空格,则函数会将它们包含在计数内。len 对相同的单字节和双字节字符串返回相同的值。如果传递给 LEN 函数的参数包含二进制大型对象块 (BLOB) 数据类型,如 DT_TEXT、DT_NTEXT 或 DT_IMAGE,则该函数将返回字节计数;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果参数为空,LEN 将返回空结果。
? ? ? ? ? ?下面上自己测试的例子(ABC 后面均有三个空格用-表示)
|
数据类型
Nvarchar(10)
Varchar(10)
Char(10)
Text
Int
Decimal(18,0)
Nchar(10)
datetime
字段内容
ABC--- ?
A B C --- ?
ABC--- ??
ABC--- ??
1230
1230
A BC---
2013-01-01 12:05:00.000
DataLength
20
8
10
7
4
5
20
8
len
3
5
3
不支持
4
4
4
18
Patindex ? ? ?官方解释:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 其实说白了就是查找某字串第一次出现的位置,比较有内涵的是应用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第一块:参数,就是通配符的使用问题(人工操作);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第二块:返回所在位置(系统操作)
“_”号表示任意单个字符,该符号只能匹配一个字符"_"可以放在查询条件的任意位置,且只能代表一个字符.一个汉字只能使用一个“_”表示
“%”符号是字符匹配符,能匹配0个或更多字符的任意长度的字符串
"[]"在模式查询中可以利用"[]"来实现查询,一定范围的数据。[]用于指定一定范围内的任何单个字符,包括两端数据;
"[^]"用来查询不属于指定范围([a-f])或集合(abcdef])的任何单个字符.
stuff ? ? ? ? ? ? ?官方解释:函数将字符串插入另一个字符串,它在第一字符串中从开始位置删除指定长度的字符,然后将第二个字符串插入到第一个字符串的开始位置;
? ? ? ? ? ? ? ? ? ? ?语法:STUFF ( character_expression 1,start ,length ,character_expression 2)
? ? ? ? ? ? ? ? ? ? ?其实顾名思义就是从character_expression 1中start 位置开始删除length 个字符,然后再start位置插入character_expression 2这个字符串;
? ? ? ? ? ? ? ? ? ? ? 应用 ?:select stuff("abcdefg",2,3,"xyz") from A ?输出结果为: 'axyzefg' ?记住索引位置是从1开始的
replicate ? ? ?官方解释:以指定的次数重复字符串值;
? ? ? ? ? ? ? ? ? ? ?语法: ?REPLICATE ( string_expression ,integer_expression )
? ? ? ? ? ? ? ? ? ? ? 顾名思义就是把string-expression 这个字串重复integer_expression 次后呈现,若integer_expression 为负数,则返回Null 值
? ? ? ? ? ? ? ? ? ? ? ?应用:select Replicate(‘A’,4) +'SS' from A 输出结果为:’AAAASS‘ 其实跟c#中PadLeft,PadRight 有点相似
left ? ? ? ? ? ? ? ? 官方解释:返回字符串从左边开始指定个数的字符;
? ? ? ? ? ? ? ? ? ? ? ?语法:left(character_expression,integer_expression)
? ? ? ? ? ? ? ? ? ? ? ?顾名思义就是把character_expression字串从左侧开始截取integer_expression长度后返回;
? ? ? ? ? ? ? ? ? ? ? ?应用:SELECT LEFT('abcdefg',2) 输出结果为:‘ab’;
right ? ? ? ? ? ? ? 与left 同理,不同点在于right 是从右边开始截取的!!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!