【问题标题】:SQL - Capitalize only the first letter of each word and lowercase all the restSQL - 仅将每个单词的第一个字母大写,其余全部小写
【发布时间】:2019-10-07 13:19:34
【问题描述】:

我到处都看到过这个帖子,但我似乎无法为我的情况找到一个现实的解决方案。 在我们的地址字段中,我们有诸如“555 RODeo drive, 555 rodeo drive, 555 RODEO DRIVE 等的值。这些需要格式化为 555 Rodeo Drive。请告知一种也可以在城市、州和国家字段。即 UNITED STATES > United States。

【问题讨论】:

  • 在我看来,使用 SQL Server 将某些东西变成“Propercase”是不明智的; SQL Server 的强项不是字符串操作。使用做得更好的东西,比如你的表现层。例如,如果您使用的是 .Net 语言,则您有函数 ToTitleCase
  • 是的 - 它到处张贴,没有一个是完美的。这是有原因的——你不能编写代码来弥补人工输入有缺陷的每一种可能性。

标签: sql sql-server


【解决方案1】:

这种工作最好在表示层中进行,在这里您可以在输入数据时使用Mask,并且还可以更新那些字符串,但这里有一个提示

SELECT STRING_AGG(S, ' ')
FROM
(
  VALUES
  (1, '555 RODeo drive'), 
  (2, '555 rodeo drive'), 
  (3, '555 RODEO DRIVE'),
  (4, 'UNITED STATES')
) T(ID, Str) CROSS APPLY
(
  SELECT CONCAT(UPPER(LEFT(Value, 1)), LOWER(RIGHT(Value, LEN(Value) -1))) S
  FROM STRING_SPLIT(Str, ' ')
) TT
GROUP BY ID;

Online Demo

【讨论】:

    【解决方案2】:

    最简单的方法是使用Fuzzy Lookup in SSIS. sample 使用 SSIS 实现模糊查找。

    但如果你真的想使用 T-SQL,这个post 可能会有所帮助...

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      相关资源
      最近更新 更多