查找以空格结尾的MySQL字段

时间:2012-03-21 13:58:57

标签: mysql

在数据库导入之后,有一些带有脏字段的行以数据库中保存的(有时多个)空格结束,并且为了在成千上万的其他行中找到它们,我可以使用它们。我试图做一个像这样的查询:

SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP ' $'

但是返回零行。我尝试了其他一些结果与其他结果:

SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[:space:]]$' -- Zero Rows
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]$' -- Zero Rows
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]' -- Those with a space anywhere in the value
SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]{2}' -- Those with two spaces in a row

使用单个空格查找所有内容并没有多大帮助,因为一些干净的行在该字段中的单词之间有单个空格。最后一个捕获了90%的脏行,但是错过了那些只有一个空格的行。我如何使用$符号表示字段的结尾有什么问题吗?

在计算字段结尾时,MySQL RIGHT()SUBSTRING()函数似乎剥离了空格:

SELECT * FROM `mytable` WHERE RIGHT(`dirtyfield`)=" " -- Only returns one row that has " " for that field
SELECT * FROM `mytable` WHERE SUBSTR(`dirtyfield`,-1)=" " -- Only returns one row that has " " for that field

使用比较的另一个尝试也没有:

SELECT * FROM `mytable` WHERE TRIM(`dirtyfield`)!=`dirtyfield` -- zero rows returned

" dirtyfield"如果重要,则字段为VARCHAR(128)

编辑:我是个白痴;字段不以空格结尾,然后以多个空格结尾,后跟逗号(从错误的CSV文件导入)。

SELECT * FROM `mytable` WHERE RIGHT(`dirtyfield`,1)=','

该查询找到了它们。我用逗号分隔的视图查看表的输出,并没有注意到逗号是双倍的。

5 个答案:

答案 0 :(得分:6)

我认为这可能是正确的:

SELECT * FROM `mytable` WHERE `dirtyfield` REGEXP '[[.space.]]+$'

它将字段结尾($)与1个或多个(+)空格([[.space。]]匹配) 无论如何,如果你想用LIKE语句做同样的事情更容易:

... LIKE '% '

如下面的答案。

答案 1 :(得分:4)

有类似的问题。你用trim()做的比较:

SELECT * FROM `mytable` WHERE TRIM(`dirtyfield`)!=`dirtyfield`

不起作用,但是:

SELECT * FROM mytable where char_length(dirtyfield) > char_length(trim(dirtyfield))

完成工作并向您显示在内容的开头和/或结尾都有空格的行。字符计数有效。老实说,我不知道为什么trim()不会直接在第一个查询上进行比较。

希望这会有所帮助。就像你的领域一样,这个解决方案肯定有点脏。

答案 2 :(得分:1)

我没有尝试过这个,但我认为这可能会找到以空格结尾的条目

SELECT * FROM `mytable` WHERE `dirtyfield` LIKE "% "

答案 3 :(得分:0)

您是否认为您实际上获得了包含空格的行,但是Web浏览器不会为您呈现这些行?

“两个(2个或更多个空格)单词”的值在您的浏览器中看起来像“两个单词”。

尝试:

WHERE dirtyfield REGEXP '(^[[:space:]]|[[:space:]]{2,}|[[:space:]]$)'

这应该获取所有这些行。只要考虑一下你可能会获得正确的行,但由于浏览器的原因,它看起来并不那样。

答案 4 :(得分:0)

嘿,我做了类似的事情并进入了这个页面,查看下面的查询,这可能会有所帮助..

SELECT * FROM `mytable` WHERE `dirtyfield` LIKE "% %"