【问题标题】:SQL changing value to uppercase with specified localeSQL 使用指定的语言环境将值更改为大写
【发布时间】:2019-02-27 21:18:40
【问题描述】:

在 SQL 中,是否有任何函数可以将指定语言环境的字符串大写?函数upper(a_string)接受一个参数,对于ASCII以外的字符是不够的。

例如,我想运行这样的语句来更改表中包含土耳其字符的值的所有小写字符:

UPDATE a_table SET a_field = UPPER(a_field, TurkishLocale);

有这样的功能吗?如果不是,我该如何定义?

【问题讨论】:

  • 如果没有这样的功能,你可以一直使用replace()

标签: sql sqlite locale uppercase


【解决方案1】:

函数UPPER(a_field) 会将整个单元格数据大写。如果您希望将单元格的特定字符大写,您可以使用REPLACE(a_field, 'tr', 'TR') 来满足您的需要。

【讨论】:

  • 这就是我想要的,我想将整个单元格数据大写。例如,当我执行upper("Türkçe") 时,它会返回 "TüRKçE",因为 "ü""ç" 不是 ASCII。
  • @ShamilAtesoglu 恐怕非 ascii 字符本身是独一无二的并且没有大写形式,也许这就是它们保持不变的原因。
【解决方案2】:

您可以使用区分大小写的排序规则,例如

 UPDATE a_table SET a_field = UPPER(a_field COLLATE Turkish_CS_AI)

【讨论】:

  • 我不知道为什么,但不幸的是,它不起作用。与UPPER(a_field) 的结果相同。例如,UPPER("Sözcük")UPPER("Sözcük" COLLATE Turkish_CS_AI) 都返回 "SöZCüK"。 (而且我需要说我对 SQL 很陌生,我对排序规则了解不多)。
【解决方案3】:

您必须使用 ICU extension module 在 sqlite 中获取依赖于区域设置的案例函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多