0

我正在使用一个包含两个版本的存储信息的表。为了简化它,一列包含文件运行的旧描述,而另一列包含显示运行文件的更新标准。它变得更加复杂,因为较旧的色谱柱本身可以有多个标准。桌子:

Old Column              New Column
Desc: LGX/101/rpt          null
  null                     Home
Print: LGX/234/rpt         null
  null                     Print
  null                     Page

我需要将两列合二为一,但我还需要从旧列值的开头删除“Print:”和“Desc:”字符串。有什么建议么?如果/当我忘记了您需要知道的事情时,请告诉我!

(我正在使用 Cache SQL 编写代码,但我只是想要一个通用的方法来解决我的问题,我可以弄清楚过去的细节。)

编辑:条件是 if substr(oldcol,1,5) = 'desc:' then substr(oldcol,6) else if substr(oldcol,1,6) = 'print:' then substr(oldcol,7) etc . 以便取出“desc:”和“print:”以对数据进行一些清理。

EDIT2:我想让表格看起来像这样:

    Col
  LGX/101/rpt
    Home
  LGX/234/rpt
    Print
    Page
4

3 回答 3

2

很难准确地理解你在寻找什么。以上是否代表需要合并/合并的之前/之后,或两列。

我的猜测是这COALESCE可能会对你有所帮助。它接受一堆参数并返回第一个非 NULL。

于 2012-09-28T20:06:38.343 回答
1

如果 old 为 NULL,您似乎想从 new 中获取值,如果 new 为 null,则从 old 中获取值。为此,您可以在 SQL 中使用 case 语句。我知道 MySQL 支持 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。

于 2012-09-28T20:09:58.217 回答
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:”的字符串。

希望这可以帮助。

于 2012-09-28T21:52:56.880 回答