我在数据库里表的资料如下
ST_NO ST_NAME
0001 DP001AAAAA小小大大DP002BBBBB我們大家
0002 小小大大DP001A小小大大DP002AAAAA我們大家
我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
第二行资料取完后为:小小大大DP 大大DP002AAA
上面都要按字节取字符串,一个中文占两个字节
ST_NO ST_NAME
0001 DP001AAAAA小小大大DP002BBBBB我們大家
0002 小小大大DP001A小小大大DP002AAAAA我們大家
我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
第二行资料取完后为:小小大大DP 大大DP002AAA
上面都要按字节取字符串,一个中文占两个字节
解决方案 »
- 急求一sql语句,在线等结果
- 存储过程 对于局部变量,text、ntext 和 image 数据类型无效。
- 如何对分组统计的数据进行百分比计算
- 执行字符串中的SQL,怎么得到结果?
- Msg 16916 cursor with then name 'tran_Cursor' does not exist
- SQL语句执行顺序不对,第二行执行了,但第一行未执行
- SOS!!Sql Server 卸載後無法重新安裝,這裡是日誌,麻煩個偉大哥幫忙.n次失敗~~~(安裝程式無法設定伺服器。詳細資訊請參考伺服器錯誤記錄檔
- sql 2000 存储法律法规条文 应该怎样设计表?
- 如何改变字段名称??
- 新人求:不固定列转行语句。
- 新手求救~~求一sql语句
- 生成插入语句的存储过程
from tb
select PATINDEX('%[^0-9a-zA-Z]%', 'DP001AAAAA小小大大DP002BBBBB我們大家')
找第一个汉字的位置
-- Author :SQL77(只为思齐老)
-- Date :2010-03-24 13:04:11
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
go
create table #TB([ST_NO] varchar(4),[ST_NAME] varchar(20))
insert #TB
select '0001','DP001AAAAA中国人' union all
select '0002','小小大大DPFDAFDS人中'
--------------开始查询--------------------------SELECT LTRIM(SUBSTRING(CONVERT(BINARY,[ST_NAME]),1,10)) FROM #TB----------------结果----------------------------
/*
----------
DP001AAAAA
小小大大DP(所影响的行数为 2 行)
*/如果有繁体字没办法会出问题我试了下
ST_NO ST_NAME
0001 DP001AAAAA小小大大DP002BBBBB我們大家
0002 小小大大DP001A小小大大DP002AAAAA我們大家
我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
第二行资料取完后为:小小大大DP 大大DP002AAA
上面都要按字节取字符串,一个中文占两个字节有什么别的规模吗,数量据里的数据长度是按字符取长度....
ST_NO ST_NAME
0001 DP001AAAAA小小大大DP002BBBBB我們大家
0002 小小大大DP001A小小大大DP002AAAAA我們大家
我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
第二行资料取完后为:小小大大DP 大大DP002AAA
上面都要按字节取字符串,一个中文占两个字节
SQL code
有什么别的规律吗,数量据里的数据长度是按字符取长度....
截取到第十一字节会出现什么情况?将字符串拆开放到一个临时表里create table #tmp(
id int IDENTITY,
type varchar(1),--0表示非汉字,1表示汉字
sub_str varchar(200)
)
id type sub_str
------------------
1 0 DP001AAAAA
2 1 小小大大
3 0 DP002BBBBB
4 1 我們大家然后再根据字节数来判断
比如 要取1BYTE到10BYTE
判断id值是1的就能满足条件,
直接返回DP001AAAAA
要取19BYTE到28BYTE
id值是1的datalength 是10,长度不够,id值是2的datalength是8,共18,长度不够,等等依次判断
可以做一个存储过程实现
没有规律啊..
资料也可以完全是从界面Key进数据库的.前10BYTE也可以有中文
insert #TB select '0001', 'DP001AAAAA小小大大DP002BBBBB我們大家'
union all select '0002', '小小大大DP001A小小大大DP002AAAAA我們大家'SELECT cast(substring(convert(text,st_name),1,10) AS VARCHAR)[1-10Byte],
cast(substring(convert(text,st_name),19,10) AS VARCHAR) [19-28byte]
FROM #TB--result
/*1-10Byte 19-28byte
------------------------------ ------------------------------
DP001AAAAA DP002BBBBB
小小大大DP 大大DP002A(所影响的行数为 2 行)
*/