【问题标题】:A column has a mix between City and State AND just City. I've already separated City and State, but how do I keep the correct City fields?一列混合了 City 和 State 以及只有 City。我已经将 City 和 State 分开了,但是如何保留正确的 City 字段?
【发布时间】:2019-09-30 16:36:26
【问题描述】:

在我的表格中,我有 2 列需要修复。第一列是“城市”,它包含城市和州的混合,并且仅包含城市。第二列是“状态”,混合了空值和状态。需要注意的是,当 Ciy 列同时包含 City 和 State 时,“State”列为 Null。

NEW YORK,NY | NULL
NEW YORK    | NY

到目前为止,我已经编写了分隔“城市”列的代码;但是,当 City 列不包含 state 时,它​​会变为 ' ',然后 state 列会被“City”值填充。下面的后两列是“City_Split”和“State2”。

NEW YORK,NY | NULL | NEW YORK | NY
NEW YORK    | NY   | ''       | NEW YORK

到目前为止,我已经尝试过 case 语句,但我只是感到困惑。

我想要:

NEW YORK,NY | NULL | NEW YORK | NY
NEW YORK    | NY   | NEW YORK | NY
SELECT
    CITY, CPS,
    SUBSTRING(CITY, 0, CHARINDEX(',', CITY, - 1)) AS CITY_SPLIT,
    SUBSTRING(CITY, CHARINDEX(',', CITY) + 1, LEN(CITY)) AS STATE2
FROM srcFlatFile.dbo.SWIFT AS SWIFT
WHERE (ISO_COUNTRY_CODE = 'US')

如果我没有足够清楚地提出问题,我深表歉意,我一般是编码新手。

【问题讨论】:

  • SUBSTRING(CITY, 1, CHARINDEX(',', CITY) - 1))

标签: sql sql-server split


【解决方案1】:
with data as (<your query>)
update data set city = city_split, state = state2
where charindex(',', city) > 0

您需要有将更新限制为需要更新的行的额外条件。因为这些表达式要求有逗号。

这种方法是按原样使用select 的简单方法。但它确实可以(并且应该?)以这种方式在没有 CTE 的情况下完成:

update srcFlatFile.dbo.SWIFT
set city = substring(city, 1, charindex(',', city) - 1),
       state = substring(city, charindex(',', city) + 1, 2)
where charindex(',', city) > 0

【讨论】:

  • where charindex(',', city) &gt; 1 修复了我的查询!非常感谢您,先生!
  • @Lizzie 其实我想我应该写&gt; 0。很高兴它成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
相关资源
最近更新 更多