【问题标题】:Substring and split in sql serversql server中的子字符串和拆分
【发布时间】:2017-01-12 15:13:00
【问题描述】:

我的 sql server 中有这些数据,您可以在这里看到:

1/2
1/4
2/23
12/13
1/10
...

我需要将这些更改为001,001,002,012,001,..

我用这个。但它不起作用

LEFT(SheetNumber,LEN(SheetNumber)-CHARINDEX('/',SheetNumber))

我的查询

SELECT  [Id]

      ,LEFT(SheetNumber,LEN(SheetNumber)-CHARINDEX('/',SheetNumber))


      ,[SubmitDateTime]
  FROM [SPMS2].[dbo].[Lines] where SheetNumber  like '%/%'

【问题讨论】:

  • LEFT(SheetNumber,CHARINDEX('/',SheetNumber) - 1) 是这样的吗?
  • @Mark 是的,它可以工作,但是将 0 附加到值上怎么样?我的意思是 001,002,011
  • 您需要将值作为逗号分隔链(如您的问题和此处再次要求的那样),还是仅作为结果集中的一列?

标签: sql-server substring


【解决方案1】:

您不需要使用 LEN。只需使用

LEFT(SheetNumber,CHARINDEX('/',SheetNumber) - 1)

要将其变为前面为 0 的 3 位数字,您可以使用类似这样的内容

Right('000' + LEFT(SheetNumber,CHARINDEX('/',SheetNumber) - 1), 3)

【讨论】:

  • 这种填充数字的方法很危险。用一个四位数的号码试试这个,你会得到你的号码。更好地使用REPLACE with STR
【解决方案2】:

试试这个

RIGHT('000' + LEFT(SheetNumber, CHARINDEX('/', SheetNumber) - 1), 3)

【讨论】:

  • 这种填充数字的方法很危险。用一个四位数的号码试试这个,你会得到你的号码。更好地使用REPLACE with STR
【解决方案3】:

试试这个

DECLARE @tbl TABLE(SheetNumber VARCHAR(100));
INSERT INTO @tbl VALUES
 ('1/2')
,('1/4')
,('2/23')
,('12/13')
,('1/10');

SELECT STUFF(
   (
    SELECT ',' + REPLACE(STR(LEFT(SheetNumber,CHARINDEX('/',SheetNumber) - 1),3),' ','0')
    FROM @tbl
    FOR XML PATH('')
   ),1,1,'');

结果

001,001,002,012,001

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2018-10-26
    相关资源
    最近更新 更多