len字符长度的问题

dreamreality 2008-08-28 12:19:23
有哪位大侠知道,在SQL Server中,我希望select len('我')显示的值为2,而select len('s')显示的值为1,这个要换成一个什么样的函数
...全文
198 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
downmoon 2008-08-28
  • 打赏
  • 举报
回复
好像也可以用datalength
select datalength('a你')
select len('a你')
downmoon 2008-08-28
  • 打赏
  • 举报
回复
http://www.cnblogs.com/server-you/archive/2006/09/20/509945.aspx
downmoon 2008-08-28
  • 打赏
  • 举报
回复
LENB(“中文”)
jacklinchen 2008-08-28
  • 打赏
  • 举报
回复
mark,顶一下
lff642 2008-08-28
  • 打赏
  • 举报
回复
学习.
fcuandy 2008-08-28
  • 打赏
  • 举报
回复
datalength
等不到来世 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wgzaaa 的回复:]
晕了,把datalength当delphi里的内容了,9楼正确
[/Quote]

o
zhiguo2008 2008-08-28
  • 打赏
  • 举报
回复
--提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL 
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
go


学习
zhiguo2008 2008-08-28
  • 打赏
  • 举报
回复
datelength()
yfq85825 2008-08-28
  • 打赏
  • 举报
回复

code=SQL]
select datalength('我')
select datalength('csdn')
[[/code]
幸运的意外 2008-08-28
  • 打赏
  • 举报
回复
楼主朋友,在SQL中len函数是检测参数有多少个字节长度的.一般的英文字符和标准ASCII字符都是一个字节,而像汉字,日文假名这些大字符都是用2个字节存储的,所以len('我')返回是2,而len('s')返回是1.如果您只是单纯想检测参数的长度,那么用datalength(字符型参数)就可以办到,它可以检测出字符串安标准字节编码时的长度,如果您想单方面统计大字符的个数,那么就要用unicode()函数了,函数返回大于256的值时说明参数是大字符,否则是标准ASCII字符.
wgzaaa 2008-08-28
  • 打赏
  • 举报
回复
晕了,把datalength当delphi里的内容了,9楼正确
lgxyz 2008-08-28
  • 打赏
  • 举报
回复
datelength()

select datalength('我')
select datalength('s')
/*

-----------
2

(所影响的行数为 1 行)


-----------
1

(所影响的行数为 1 行)
*/
水族杰纶 2008-08-28
  • 打赏
  • 举报
回复
--提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
go
--提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN @S
END
go
declare @S varchar(3000)
set @s='adfa1235ad好的'
select len(DBO.GET_STR(@s))
select 2*len(DBO.CHINA_STR(@s))
tianhuo_soft 2008-08-28
  • 打赏
  • 举报
回复

select datalength('我')
select datalength('s')

用这个函数
dreamreality 2008-08-28
  • 打赏
  • 举报
回复
谢谢各位大侠,方法我自己找到了,将我的解决方法贴出来给大家,一起学习
DATALENGTH(CAST(@STRTEMP AS VARCHAR(1000)) COLLATE CHINESE_PRC_BIN)-len(@STRTEMP),这样我就可以知道里面有多少个字符是点用两个字节的
wgzaaa 2008-08-28
  • 打赏
  • 举报
回复
--想不到其它好办法只能再次修改
alter function f_lenb(@a varchar(500)) returns int as
begin
if len(isnull(@a,''))=0 return 0
declare @i int
select @i=len(@a)
while 1=1
begin
if substring(convert(varbinary,@a),1,@i)=@a
goto AA
set @i=@i+1
end
AA: return @i
end
wgzaaa 2008-08-28
  • 打赏
  • 举报
回复
alter function f_lenb(@a varchar(500)) returns int as
begin
if len(isnull(@a,''))=0 return 0
declare @i int
select @i=1
while @i>=1
begin
if substring(convert(varbinary,@a),1,@i)=@a
goto AA
set @i=@i+1
end
AA: return @i
end
--修饰下,注意右边的空格(包括全角空格)不被计算在内,所以右边要空格要作些修正
wgzaaa 2008-08-28
  • 打赏
  • 举报
回复
create function f_lenb(@a varchar(500)) returns int as
begin
if len(@a)=0 return 0
declare @i int,@j int
select @i=1,@j=len(@a)*2
while @i>=1 and @i<=@j
begin
if substring(convert(varbinary,@a),1,@i)=@a
goto AA
set @i=@i+1
end
AA: return @i
end
-----------------------------------写了个函数
select dbo.f_lenb('我们a')--5

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧