【问题标题】:SQL: Substring from the rightSQL:从右边开始的子字符串
【发布时间】:2019-10-09 15:37:35
【问题描述】:

我正在想办法使用 substring 函数或任何其他函数来删除句子右侧的某些内容

例如:

Washington, USA
Michigan, USA
Tokyo, JAP
Seoul, KOR

所以,在上面的例子中,我想使用一个函数来删除 ', USA' 或 ', JAP'。国家代码将始终为 3 个字母。因此,要删除的总间距为 5(3 个字符,1 个空格和 1 个逗号)

【问题讨论】:

  • 您使用的是 SQL Server 还是 MySQL?您只是在寻找LEFT() / RIGHT() 功能吗?
  • 你的意思是LEFTRIGHTLEFT 是非常常见的字符串操作函数。
  • MySQL 也有LEFT
  • @Sami Left & right 函数可以在城市字符大小始终相同但在上述情况下不同时使用。国家字符始终保持不变。
  • @Nexus 没有什么可以阻止 LEFT 的第二个参数的值是一个表达式,而不是一个文字整数。

标签: mysql sql mysql-workbench


【解决方案1】:

如果您使用的是 MySQL,那么SUBSTRING_INDEX 可能是最简单的方法:

SELECT
    'Washington, USA' AS state_country,
    SUBSTRING_INDEX('Washington, USA', ',', 1) AS state
FROM dual;

Demo

【讨论】:

  • 完美...谢谢
  • 如果规范是返回第一个逗号之前的部分,我会这样做。如果精确的规范是删除最后五个字符,我们可以使用 CHAR_LENGTH 和 SUBSTRING 函数的组合;如果规范的一部分是检查字符串末尾是否有逗号、空格和三个字符,我们可以使用正则表达式进行检查。 +10
【解决方案2】:

如果您确定总间距为 5,则可以使用 SUBSTR 函数。像这样:

SELECT SUBSTR("美国华盛顿", 1, CHAR_LENGTH("美国华盛顿") - 5);

【讨论】:

  • 最好使用CHAR_LENGTH 返回字符数LENGTH 函数返回 字节数。这与单字节字符相同,但我们正处于一个多字节字符集很普遍的时代。
【解决方案3】:

LEFT 运算符用于在字符串左侧获取特定数量的字符。这里的问题是你不知道你需要扮演多少角色。

您可以使用 LOCATE MySQL 函数解决此问题(如果您实际使用 MySQL)。

SELECT LEFT("Washington, USA", LOCATE(",","Washington, USA")-1);

https://www.w3schools.com/sql/func_mysql_left.asp https://www.w3schools.com/sql/func_mysql_locate.asp

编辑:蒂姆的答案更好

【讨论】:

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