我想从列中提取文本并将其放入自己的列中。
文本总是16个字符长的DD / MM / YYYY HH:MM格式,出现文字"现场"它只出现在文本中一次,后面跟着文本" Off-Site"这也只出现一次。
这是我目前正在使用的代码,但我根本没有设置它。
WITH
LEFT(SUBSTRING(eventcomments,
CHARINDEX('On-Site', r.eventcomments) + 1, 16),
CHARINDEX('Off-Site', r.eventcomments) - 1) AS Onsite
我收到此错误消息。
Invalid length parameter passed to the LEFT or SUBSTRING function.
答案 0 :(得分:0)
这是因为值不在字段中。一个简单的方法只是将它们添加到charindex()
:
LEFT(SUBSTRING(eventcomments,
CHARINDEX('On-Site', r.eventcomments + 'On-Site') + 1, 16),
CHARINDEX('Off-Site', r.eventcomments + 'Off-Site') - 1
) AS Onsite
您需要测试代码以查看它是否符合您的要求。这种方法可以防止错误。
答案 1 :(得分:0)
假设我必须从字符串列中提取第一次出现具有以下格式DD/MM/YYYY HH:SS
(长度= 16个字符)的日期/时间值,那么我将使用PATINDEX
而不是{{1因此:
CHARINDEX
结果:
SELECT *,
SUBSTRING(
x.StringColumn,
NULLIF(PATINDEX('%[0-1][0-9]/[0-3][0-9]/[0-9][0-9][0-9][0-9][ ][0-9][0-9]:[0-9][0-9]%', x.StringColumn), 0),
16) AS DateTimeExtracted
FROM (VALUES
('Bogdanel 01/02/2017 03:04 hei ho'),
('Georgel 05/06/2017 07:08 danga langa'),
('Suna''n asfintit 09/11/2018 11:22 hei talanga'),
('Danga langa. Pai da.'),
(' '),
(NULL)
) x(StringColumn)