我想用SQL中的相应值替换某些值。我无法创建交叉引用表。这些值可以在我的应用程序的'txt‘或'properties’文件中指定
我查看了CASE语句,但有200个替换项需要进行替换,而CASE是不够的
SELECT dummy FROM TestTable;在我的回答中,如果我得到LOT_NUMBER,我想用Lot Number替换它,或者如果我得到LOT_NUMBER_XREF,我想用Lot Number Cross-Reference替换它
dummy
LOT_NUMBER
LOT_NUMBER_XREF将替换为
dummy
Lot Number
Lot Number Cross-Reference发布于 2019-01-04 04:12:14
如果您有许多不同的值要替换,则应该创建一个表来存储旧值到新值的映射。然后,您可以在查询中联接该表。
下面的SQL用新值替换旧值(如果未定义转换,则保留原值):
SELECT
COALESCE(m.new_value, t.value)
FROM
table t
LEFT JOIN mapping_table m
ON t.value = m.old_value对于有限数量的要翻译的值,可以大小写。或者使用联合的CTE:
WITH mapping_table AS (
SELECT 'LOT_NUMBER' AS old_value, 'Lot Number' AS new_value
SELECT 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
SELECT
COALESCE(m.new_value, t.value)
FROM
table t
LEFT JOIN mapping_table m
ON t.value = m.old_value发布于 2019-01-04 04:16:05
如果你不能使用交叉引用表,可以使用(你必须在你的应用程序中生成)子查询或cte!CTE:
with mapping as (
select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
select
t.value,
coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join mapping m on t.value = m.old_value或SubQuery:
select
t.value,
coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join (
select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
) m on t.value = m.old_value发布于 2019-01-04 04:20:56
如果你有一些通用的东西,比如_字符,那么你可以使用LIKE运算符和
SELECT replace(dummy,'_',' ') from table where
dummy like '%_%' -- check generic regex然后,在此基础上使用CASE WHEN和DUMMY IN(X,REF) Then REPLACE(DUMMY,'X',CROSS),对于其他情况也是如此,这将减少案例的数量。
问题是只需要检查泛化的术语和它们的替换项,存储它,IN子句,预过滤最一般的术语。如果计数仍然很大,则需要一个临时表用于查找引用,就像其他编程语言中的数组一样
https://stackoverflow.com/questions/54029037
复制相似问题