高分求解,关于varchar

appleIIappleII 2003-10-19 06:33:43
我有一字段定义A为varchar格式,在应用中我要用到varchar的长度,但A中为1234BFRS时,起长度正确为8,但但有中文时如‘测试ABCDE’时,长度为6,我想其应该是8,如何解决???
加急!!!
加急!!!
谢谢!!!
...全文
40 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
perfwell 2003-10-21
  • 打赏
  • 举报
回复
declare @a varchar(100)
set @a='1234BFRS'

select cast(substring(cast(@a as varBinary(100)),1,4) as varchar(100))

set @a='测试ABCDE'

select cast(substring(cast(@a as varBinary(100)),1,4) as varchar(100))
这不是你要的结果吗???
tohen 2003-10-21
  • 打赏
  • 举报
回复
declare @a varchar(100)
set @a='1234BFRS'
select cast(substring(cast(@a as varBinary(100)),5,1) as varchar(100))
set @a='测试ABCDE'
select cast(substring(cast(@a as varBinary(100)),5,1) as varchar(100))
黨把set @a='测试ABCDE'
select cast(substring(cast(@a as varBinary(100)),5,1) as varchar(100))
改成
set @a='测试ABCDE'
select cast(substring(cast(@a as varBinary(100)),2,1) as varchar(100))
好像就不行了 !

tohen 2003-10-21
  • 打赏
  • 举报
回复
declare @aa varchar(100)
set @aa='測試ABCDE'
select datalength (@aa)

結果因該是9吧 ! 細心一點.
w_rose 2003-10-21
  • 打赏
  • 举报
回复
上面写错了!

declare @a varchar(10)
set @a='测试ABCD'
print len(@a) --我这里结果为:6
print datalength(@a) --我这里结果为:8
print datalength(cast(@a as varbinary(100))) --我这里结果为:8
go
w_rose 2003-10-21
  • 打赏
  • 举报
回复
什么呀?一会6、一会8、一会9、、一会14,看不懂喽。

运行:

select substring(datalength('测试ABCDE'),2,1)
go

对看到错误信息,信息中说的明白,分开char,nchar,binary三类情况考虑问题。
start1127 2003-10-20
  • 打赏
  • 举报
回复
嗬嗬,select datalength('测试ABCDE')返回值9吧
appleIIappleII 2003-10-20
  • 打赏
  • 举报
回复
等待,求救!!
welyngj 2003-10-20
  • 打赏
  • 举报
回复
用nvarchar则是返回7?

declare @a nvarchar(200)
set @a=N'测试ABCDE'
select datalength(@a)
结果
14
axiaowin 2003-10-20
  • 打赏
  • 举报
回复
select datalength('测试ABCDE')明明是9,一个汉字占两个字节。
leus 2003-10-20
  • 打赏
  • 举报
回复
上面说错了,select datalength('测试ABCDE')返回是7
appleIIappleII 2003-10-20
  • 打赏
  • 举报
回复
在VARCHAR中如何取第二字节的字符串
leus 2003-10-20
  • 打赏
  • 举报
回复
select datalength('测试ABCDE')返回是9
用nvarchar则是返回7
pengdali 2003-10-20
  • 打赏
  • 举报
回复
declare @a varchar(100)
set @a='1234BFRS'

select cast(substring(cast(@a as varBinary(100)),5,1) as varchar(100))

set @a='测试ABCDE'

select cast(substring(cast(@a as varBinary(100)),5,1) as varchar(100))
eddiezhuo 2003-10-20
  • 打赏
  • 举报
回复
使用 Unicode 数据 把varchar 换成 nvarchar 试一直吧
hmily1688 2003-10-19
  • 打赏
  • 举报
回复
楼上的,我等着你的函数呢来充充电
CrazyFor 2003-10-19
  • 打赏
  • 举报
回复
你的意思是一个中文要算两个长度,公司机器上写过一个自定义函数,能得到你要的这样的长度,明天发给你.
coo 2003-10-19
  • 打赏
  • 举报
回复
up,不懂,最笨的方法用代号代替中文
jkljf 2003-10-19
  • 打赏
  • 举报
回复
你的数据内容未知? 对每个字符测试一下是否多字节编码不知道可不可以
appleIIappleII 2003-10-19
  • 打赏
  • 举报
回复
你 的方法我知道,
当substring('abcde',2,1)时为b

我的要求是当substring('测试abcde',2,1)时(有中文时),其结果是'试',他是字符,我要字节
既我想要的'测'字的第二个字节,什么字都不是
welyngj 2003-10-19
  • 打赏
  • 举报
回复
语法
SUBSTRING ( expression , start , length )
使用 SUBSTRING
SUBSTRING 函数返回字符串、二进制字符串或文本串的一部分,并带有三个参数:

字符串或二进制字符串、列名或包括列名的字符串值表达式。


子字符串的开始位置。


要返回的字符串的长度(以字符数表示,对于 binary 类型以字节数表示)。
下面的示例显示了每个职员的名的首字母和姓,例如 A Fuller:

USE Northwind
SELECT SUBSTRING(FirstName, 1, 1), LastName
FROM Employees

下面的示例显示字符串常量 abcdef 的第二个、第三个和第四个字符:

SELECT x = SUBSTRING('abcdef', 2, 3)


加载更多回复(4)

34,576

社区成员

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

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