我在数据库里表的资料如下
ST_NO                        ST_NAME
0001                   DP001AAAAA小小大大DP002BBBBB我們大家
0002                   小小大大DP001A小小大大DP002AAAAA我們大家
我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
第二行资料取完后为:小小大大DP          大大DP002AAA
上面都要按字节取字符串,一个中文占两个字节

解决方案 »

  1.   

    select st_no,substring(st_name,1,10)+substring(st_name,19,10)
    from tb
      

  2.   

    需要判断是汉字还是字母..用patindex
      

  3.   


    select  PATINDEX('%[^0-9a-zA-Z]%', 'DP001AAAAA小小大大DP002BBBBB我們大家')
    找第一个汉字的位置
      

  4.   

    ----------------------------------------------------------------
    -- 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 行)
    */如果有繁体字没办法会出问题我试了下
      

  5.   

    在数据库里表的资料如下
    ST_NO ST_NAME
    0001 DP001AAAAA小小大大DP002BBBBB我們大家
    0002 小小大大DP001A小小大大DP002AAAAA我們大家
    我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
    第二行资料取完后为:小小大大DP 大大DP002AAA
    上面都要按字节取字符串,一个中文占两个字节有什么别的规模吗,数量据里的数据长度是按字符取长度....
      

  6.   

    在数据库里表的资料如下
    ST_NO ST_NAME
    0001 DP001AAAAA小小大大DP002BBBBB我們大家
    0002 小小大大DP001A小小大大DP002AAAAA我們大家
    我现在要取1BYTE到10BYTE,如DP001AAAA;和第19BYTE到28BYTE,如DP002BBBBB
    第二行资料取完后为:小小大大DP 大大DP002AAA
    上面都要按字节取字符串,一个中文占两个字节
    SQL code
    有什么别的规律吗,数量据里的数据长度是按字符取长度....
      

  7.   

    貌似没有截取字节的函数
    截取到第十一字节会出现什么情况?将字符串拆开放到一个临时表里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,长度不够,等等依次判断
    可以做一个存储过程实现
      

  8.   


    没有规律啊..
    资料也可以完全是从界面Key进数据库的.前10BYTE也可以有中文
      

  9.   

    你这个没有取从19BYTE到28BYTE的资料,都是1到10BYTE的资料啊.
      

  10.   

    create table #TB([ST_NO] varchar(4),[ST_NAME] varchar(100))
    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 行)
    */