删除MySQL中列的最后两个字符


77

我有一个SQL列,其中的条目是字符串。我需要在修剪最后两个字符后显示这些条目,例如,如果该条目199902345应该输出1999023

我尝试研究TRIM,但看起来只有在我们知道最后两个字符是什么的情况下,它才能提供修剪功能。但就我而言,我不知道最后两个数字是什么,只需要丢弃它们即可。

简而言之,什么是MySQL字符串操作可以修剪字符串的最后两个字符?

我必须补充一点,字符串的长度不是固定的。它可以是9个字符,11个字符或任何其他字符。


列的数据类型是什么?INT或VARCHAR。INT将允许更快的计算。
Salman A

@Salman的VARCHAR(因为在执行过程中也有Chars)
Lucky Murari

1
确定,然后SUBSTRING似乎合适。对于INT数据类型,它是那么容易,因为除以100
萨尔曼一个

Answers:


120

要从字符串中选择除最后n个字符以外的所有字符(或换句话说,从字符串中删除最后n个字符);一起使用SUBSTRINGCHAR_LENGTH函数:

SELECT col
     , /* ANSI Syntax  */ SUBSTRING(col FROM 1 FOR CHAR_LENGTH(col) - 2) AS col_trimmed
     , /* MySQL Syntax */ SUBSTRING(col,     1,    CHAR_LENGTH(col) - 2) AS col_trimmed
FROM tbl

要从字符串末尾删除特定的子字符串,请使用以下TRIM函数:

SELECT col
     , TRIM(TRAILING '.php' FROM col)
-- index.php becomes index
-- index.txt remains index.txt

71

为什么不使用LEFT(string,length)函数而不是substring。

LEFT(col,length(col)-2) 

您可以访问这里https://dev.mysql.com/doc/refman/5.7/zh-CN/string-functions.html#function_left了解有关Mysql String Functions的更多信息。


1
虽然接受的答案是正确的,但我更喜欢此答案。我阅读了一些有关LEFT()比SUBSTRING()性能更高的讨论,但是我现在找不到链接。如果您可以为LEFT函数添加指向mysql文档的链接,那就太好了。
anuragw

1
比SUBSTRING()好得多的解决方案
Matthias Kleine

如果不同之处在于, 1函数调用,那么我认为拥有一个全新的函数来实现的只是命名空间污染。 RIGHT稍微有用一点,因为它可以使您免于LENGTH()计算,但是,这两者之间的任何性能提升都可能比LENGTH()单独调用的成本要少得多。LEFT RIGHT和之间的唯一区别是每次调用一个或两个加法运算SUBSTRING。在SQL性能2中,本机添加没有任何作用。
ebyrob

我必须使用CHAR_LENGTH而不是LENGTH,但此解决方案效果很好。
安东尼·泰勒


0

您可以在选择中使用要删除的LENGTH(that_string)减号或使用功能。number of charactersSUBSTRING()TRIM()


1
如果您可以显示一个TRIM()按索引处理所有字符而不是删除所有特定类型字符的示例,那么我很希望看到它。
ebyrob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.