none
如何截取sql表中某一列的字符串?(是多行,不是一行)!增加了例子! RRS feed

  • 问题

  •     谢谢大家的回复,我补充个例子上来!

        表ContractTab有很多列,我在select * from contractTable显示出来的结果上,还需要增加一列,也就是把表ContractTable中的  列SumbitNumber  只显示第一个字符,代码如下:

    select *, (SELECT SUBSTRING(SumbitNumber ,1,1) AS '第一个字符' FROM ContractTable) from ContractTable

    但错误提示是:消息 512,级别 16,状态 1,第 2 行

    子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

        该如何做呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!



    2013年7月22日 8:57

答案

  • 抱歉一开始没有把问题说清楚,不过现在问题解决了,起始就是对sumbitNumberID从“2”字开始取4个数,在用条件like 一下,正确代码如下:

    SELECT DISTINCT  [SumbitNumberID]
    ,(Substring(SumbitNumberID ,CHARINDEX('2',SumbitNumberID),4))
    FROM [SumbitTable] 


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年7月26日 1:26

全部回复

  • 你是不是把这个查询当作一个字段处理的。看错误是因为结果会有多行,不能当作列。

    比如 select *,(select column from table a ) from tableb

    如果(select column from table a)结果是多行的话是不可以的。


    Please Mark As Answer if it is helpful.

    2013年7月22日 9:02
  • 您好,
    請問您是要將多筆資料中某一欄的資料轉作一列顯示嗎?

    --建立table變數
    DECLARE @T1 AS TABLE (
    busid NVARCHAR(20)
    , drivername NVARCHAR(20)
    , insurlistnum NVARCHAR(10)
    , insurchildname NVARCHAR(10)
    );
    --新增資料
    INSERT INTO @T1
            ( busid ,
              drivername ,
              insurlistnum ,
              insurchildname
            )
    VALUES  ( N'吉A30241' ,  
              N'高 明' ,  
              N'PICC12345' ,  
              N'111'  
            )
            ,
            ( N'吉A30241' ,  
              N'高 明' ,  
              N'PICC12345' ,  
              N'222'  
            )
            ,( N'吉A30241' ,  
              N'高 明' ,  
              N'PICC12345' ,  
              N'333'  
            );
    --撈出資料        
    sELECT DISTINCT busid ,
    drivername ,
    insurlistnum ,
    STUFF( (SELECT ', ' + LEFT(insurchildname, 1)   from @T1 FOR XML PATH('')), 1, 1, '') 
    AS  [险种] FROM  @T1;


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年7月22日 10:21
  • 是不是这样啊??

    --建立测试表
    USE [tempdb] 
    GO
    CREATE TABLE #testtable
    (id VARCHAR(200))
    
    --插入数据
    INSERT INTO [#testtable] ( [id] )
    SELECT '111' UNION ALL
    SELECT '222' UNION ALL
    SELECT '333' 
    
    SELECT SUBSTRING(id,1,1) AS '第一个字符' FROM [#testtable]

    2013年7月23日 10:14
  • linjiangxian11您好,

    謝謝您到MSDN論譠跟大伙討論問題。

    建議您可以將您的table schema,測試資料,及SQL貼出來,這樣大伙才不用在那邊猜您想要的結果是什麼哦!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年7月23日 10:18
  • 只要能把那列查询出来,就可以在列上面进行字符的截取。
    2013年7月24日 2:28
    版主
  • 请LZ给出你的建表sql,你的描述里完全不知道你所说的是一列多行还是多列多行~
    2013年7月25日 2:08
  • 抱歉一开始没有把问题说清楚,不过现在问题解决了,起始就是对sumbitNumberID从“2”字开始取4个数,在用条件like 一下,正确代码如下:

    SELECT DISTINCT  [SumbitNumberID]
    ,(Substring(SumbitNumberID ,CHARINDEX('2',SumbitNumberID),4))
    FROM [SumbitTable] 


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年7月26日 1:26