我想用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
复制相似问题