【发布时间】:2018-02-21 18:16:01
【问题描述】:
我有以下 3 行字段:
Field
-------
Apple, 08/01/17 - 08/30/17; Oranges, 09/01/17 - 09/30/17
Pears, 08/01/17 - Open
Grapes, 09/01/17 - 01/30/18; Oranges, 10/02/17 - 10/03/17; Banana, 11/01/17 - 12/30/17
我需要输出如下所示:
Fruit_1 Start_Date_1 Stop_Date_1 Fruit_2 Start_Date_2 Stop_Date_2 Fruit_3 Start_Date_4 Stop_Date_5
---------------------------------------------------------------------------------------------------------------------------
Apple 08/01/17 08/30/17 Oranges 09/01/17 09/30/17
Pears 08/01/17 Open
Grapes 09/01/17 01/30/18 Oranges 10/02/17 10/03/17 Banana 11/01/17 12/30/17
我有以下代码:
SELECT left(@field, charindex(',', @field) - 1) as Fruit_1,
substring(@field, charindex(',', @field) + 2, 8) as Start_Date_1,
substring(@field, charindex('-', @field) + 2, 8) as Stop_Date_3,
substring(@field, charindex(';', @field) + 2, charindex(',', @field, charindex(',', @field) + 1) - charindex(';', @field) - 2) as Fruit_2,
substring(@field, charindex(',', @field, charindex(',', @field) + 1) + 2, 8) as Start_Date_2 ,
substring(@field, charindex('-', @field, charindex('-', @field) + 1) + 2, 8) as Stop_Date_3,
substring(@field, charindex(';', @field) + 2, charindex(',', @field, charindex(',', @field) + 1) - charindex(';', @field) - 2) as Fruit_3,
substring(@field, charindex(',', @field, charindex(',', @field) + 1) + 2, 8) as Start_Date_3,
substring(@field, charindex('-', @field, charindex('-', @field) + 1) + 2, 8) as Stop_Date_3
但有错误消息:
Invalid length parameter passed to the LEFT or SUBSTRING function
当尝试在 apples 之后的第一行中对“Oranges”进行子字符串处理时,会发生此错误。请帮忙!我正在使用 Sql-server-2012
【问题讨论】:
-
我有同样的错误。然后我检查它,我发现我在
left函数中传递了-1。如果您从查询中删除-1,则错误已解决。这不是您的孔问题的解决方案。它使您可以尝试自己的查询
标签: string csv split sql-server-2012