我的数据库的资料是繁体的,下面的语句是按字节截取字符串,但是结果出现乱码?
有没有办法可以解决啊?
SELECT cast(substring(convert(TEXT,'數位奇蹟 - CMOS IR IP cam (WLAN)'),6,5) AS VARCHAR)
有没有办法可以解决啊?
SELECT cast(substring(convert(TEXT,'數位奇蹟 - CMOS IR IP cam (WLAN)'),6,5) AS VARCHAR)
varchar()-->nvarchar()
或者在字符串前面加上N'數位奇蹟'
set @s='數位奇蹟 - CMOS IR IP cam (WLAN)';-- 截取字符串中第 5 个字节,长度为 4 字节的子字符串
declare @start int,@len int;
select @start=5, @len=4;set @start=len(convert(varchar,substring(convert(varbinary,@s),1,@start)));
select convert(varchar,substring(convert(varbinary,substring(@s,@start,len(@s))),1,@len));
'數位奇蹟 - CMOS IR IP cam (WLAN)'这个是我从数据库里随便选了一个作为例子啊.
用N怎么对整个栏位处理啊.?
你给的这个方法好像可以消除乱码..但是不能截取到我想要的子字符串,给了他开始位置(start)和长度(len)但是截取出来的子字符串不是我想要的.
SELECT cast(substring(convert(Ntext,N'數位奇蹟 - CMOS IR IP cam (WLAN)'),6,5) AS VARCHAR)
------------------------------
- CMO(所影响的行数为 1 行)
set @s='數位奇蹟 - CMOS IR IP cam (WLAN)';declare @start int,@len int;
select @start=6, @len=5;set @start=len(convert(varchar,substring(convert(varbinary,@s),1,@start)))+1;
select convert(varchar,substring(convert(varbinary,substring(@s,@start,len(@s))),1,@len));
/*
蹟 -
*/
SELECT cast(substring(convert(TEXT,'數位奇蹟 - CMOS IR IP cam (WLAN)'),7,5) AS VARCHAR)
------------------------------
蹟 - (所影响的行数为 1 行)
set @s='DP001 小小大大DP002 我們大家'declare @start int,@len int;
select @start=28, @len=8;
set @start=len(convert(varchar,substring(convert(varbinary,@s),1,@start)))+1;
select convert(varchar,substring(convert(varbinary,substring(@s,@start,len(@s))),1,@len));我截取第29到37byte就錯了,沒有截取到正確字符串,結果應該是:我們大家,這個的結果是: 我
上面中間的空格都是5個空格
-- 简单的处理办法就是用特定字符替换空格,不过有局限
declare @s varchar(100);
set @s='DP001 小小大大DP002 我們大家';declare @start int,@len int;
select @start=28, @len=8;set @start=len(convert(varchar,substring(convert(varbinary,replace(@s,' ','#')),1,@start)))+1;
select replace(convert(varchar,substring(convert(varbinary,substring(@s,@start,len(@s))),1,@len)),'#',' ');