【问题标题】:SQL query select than update tableSQL查询选择比更新表
【发布时间】:2022-01-08 19:15:12
【问题描述】:

我有一个 SQL 表,其中包含在值之间包含分隔符(下划线)的列。

我想要将这些值分成几列并更新此表。

像这样:

australia_canada 

应该变成

 col1          col2  
 ---------------------
 australia     canada 

到目前为止,我可以选择这些记录,但无需更新。

SELECT 
    nationality_1,
    REVERSE(PARSENAME(REPLACE(REVERSE(nationality_1), '_', '.'), 1)) AS [nationality_1], 
    REVERSE(PARSENAME(REPLACE(REVERSE(nationality_1), '_', '.'), 2)) AS [nationality_2],
    REVERSE(PARSENAME(REPLACE(REVERSE(nationality_1), '_', '.'), 3)) AS [nationality_3]
FROM 
    (SELECT NEWID() AS [ID], nationality_1 
     FROM [info_t]) AS [t]

在这之后——如何更新现有的表(info_t)?

【问题讨论】:

  • 您使用的是哪个 dbms? (上述查询是特定于产品的。)

标签: sql select sql-update


【解决方案1】:

你可以这样做

UPDATE R 
SET R.col1 = p.nationality_2,
    R.col2 = p.nationality_3,
    R.col3 = p.nationality_4 
FROM info_t AS R
INNER JOIN (

 SELECT id, nationality_1
,Reverse(ParseName(Replace(Reverse(nationality_1), '_', '.'), 1)) As [nationality_2]
,Reverse(ParseName(Replace(Reverse(nationality_1), '_', '.'), 2)) As [nationality_3]
,Reverse(ParseName(Replace(Reverse(nationality_1), '_', '.'), 3)) As [nationality_4]
FROM (Select newid() AS [ID], nationality_1 from [info_t]) As [t]

) AS P 
       ON R.pid = P.id 
-- WHERE R.id = '17190'; --you can set filters here

【讨论】:

  • 我试过你的答案它显示以下错误:Msg 207, Level 16, State 1, Line 27 Invalid column name 'nationality_0'. Msg 207, Level 16, State 1, Line 34 Invalid column name 'pid'
  • @khaledM_dev 我编辑了我的答案并删除了该列
【解决方案2】:

请看我的例子。我的意思是您可以根据自己的情况进行匹配:

update info_t 
set country_1 = PARSENAME(REPLACE(nationality_1, '_', '.'), 1),
    country_2 = PARSENAME(REPLACE(nationality_1, '_', '.'), 2),
    country_3 = PARSENAME(REPLACE(nationality_1, '_', '.'), 3);

SQL Server update fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多