【发布时间】:2014-01-27 03:02:34
【问题描述】:
我有一些如下所示的数据:
AS WRITTEN | UNITS | ROUTINE
TRANSFUSE - RED BLOOD CELLS 1 UNITS ROUTINE, TRANSF... | 1 |
TRANSFUSE - RED BLOOD CELLS 2UNITS ROUTINE, TRAN... | 2 |
TRANSFUSE FRESH FROZEN PLASMA 2 ROUTINE | | 2
TRANSFUSE - RED BLOOD CELLS 2 UNITS ROUTINE, TRAN... | 2 |
TRANSFUSE CRYOPRECIPITATE 10 ROUTINE | | <- 10 SHOULD BE HERE
我正在使用以下SELECT 语句来获取值,这可能是一种粗略的做法,但这是我第一次涉足SUBSTRING() CHARINDEX ETC。
SELECT 语句:
, CASE
WHEN SUBSTRING(SO.DESC_AS_WRITTEN, CHARINDEX('UNIT', SO.DESC_AS_WRITTEN)-2,1) NOT IN (
'1','2','3','4','5','6','7','8','9','10','11'
)
THEN ''
ELSE SUBSTRING(SO.DESC_AS_WRITTEN, CHARINDEX('UNIT', SO.DESC_AS_WRITTEN)-2,1)
END AS [UNITS]
, CASE
WHEN SUBSTRING(SO.DESC_AS_WRITTEN, CHARINDEX('ROUTINE', SO.DESC_AS_WRITTEN)-2,1) NOT IN (
'1','2','3','4','5','6','7','8','9','10','11'
)
THEN ''
ELSE SUBSTRING(SO.DESC_AS_WRITTEN, CHARINDEX('ROUTINE', SO.DESC_AS_WRITTEN)-2,2)
END AS [ROUTINE]
如上所述,10 应该显示在ROUTINE 下的最后一列中,但不是,我不明白为什么。所有其他人似乎都工作得很好。
谢谢,
更新 在@EkriirkE 和@GoatCO 的大力帮助下,我使用了以下代码作为解决方案:
,(CAST
(ISNULL
(REPLACE
(REPLACE
(REPLACE
(CASE
WHEN PATINDEX('%[0-9]UNIT%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9]UNIT%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9] UNIT%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9] UNIT%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9]ROUTINE%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9]ROUTINE%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9] ROUTINE%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9] ROUTINE%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9]STAT%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9]STAT%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9] STAT%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9] STAT%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9]TODAY%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9]TODAY%',so.desc_as_written)-1,2)
WHEN PATINDEX('%[0-9] TODAY%',so.desc_as_written) > 0
THEN SUBSTRING(so.desc_as_written,
PATINDEX('%[0-9] TODAY%',so.desc_as_written)-1,2)
END,
'S',''),
'T',''),
'U','')
, 0)
AS INT)
) AS [TEST]
【问题讨论】:
标签: sql sql-server-2008 substring