我正在使用包含两个存储信息版本的表。为了简化它,一列包含文件运行的旧描述,而另一列包含用于显示运行文件的更新标准。它变得更复杂,因为旧列本身可以有多个标准。表:
Old Column New Column
Desc: LGX/101/rpt null
null Home
Print: LGX/234/rpt null
null Print
null Page
我需要将两列合并为一列,但我还需要从旧列值的开头删除“Print:”和“Desc:”字符串。有什么建议?如果/当我忘记你需要知道的事情时,请告诉我!
(我正在使用Cache SQL编写,但我只是想解决一下我的问题的一般方法,我可以弄清楚过去的具体细节。)
编辑:条件是如果substr(oldcol,1,5)='desc:'则substr(oldcol,6) 否则如果substr(oldcol,1,6)='print:'则substr(oldcol,7)等。以便取出“desc:”和“print:”来稍微清理数据。
EDIT2:我想让表格看起来像这样:
Col
LGX/101/rpt
Home
LGX/234/rpt
Print
Page
答案 0 :(得分:2)
很难理解你正在寻找什么。以上是否表示需要组合/合并的前/后或两列。
我的猜测是COALESCE
可以帮助你。它需要一堆参数并返回第一个非NULL。
答案 1 :(得分:1)
如果new为NULL,看起来你想要从new获取值,如果new为null,则看起来很旧。为此,您可以在SQL中使用case语句。我知道CAS支持CASE语句,我不确定他们是否会帮助你。
SELECT (CASE WHEN old_col IS NULL THEN new_col ELSE old_col END) as val FROM table_name
如果old_col为NULL,这将获取new_col,否则它将获取old_col。
答案 2 :(得分:0)
您可以使用CharIndex和Substring函数的组合删除Print:和Desc :.在这里
SELECT CASE WHEN CHARINDEX(':',COALESCE(OldCol,NewCol)) > 0 THEN
SUBSTRING(COALESCE(OldCol,NewCol),CHARINDEX(':',COALESCE(OldCol,NewCol))+1,8000)
ELSE
COALESCE(OldCol,NewCol)
END AS Newcolvalue
FROM [SchemaName].[TableName]
Charindex给出了您要搜索的字符/字符串的位置。
因此,您在计算列(Coalesce部分)中获得“:”的位置,并将该值传递给子字符串函数。然后在指示子串函数的位置添加+1以获取“:”之后的部分。现在你有一个没有“Desc:”和“Print:”的字符串。
希望这有帮助。