MySQL – 在列中replace字符
作为一个自学成才的新手,我为自己创造了一个很大的问题。 在将数据插入到数据库之前,我已经将string中的撇号(')转换为双引号(“”),而不是所需的反斜杠和撇号(\),这是MySQL实际需要的。
在我的表增长超过20万行之前,我认为最好立即纠正这个问题。 所以我做了一些研究,发现了SQL REPLACE函数,这很好,但我现在感到困惑。
在ASP中,我是这样做的:
str = Replace(str,"'","""")
如果我在SQL Workbench中查看我的数据库,那么我转换的符号现在是一个单引号(“),这让我困惑了一些,我明白为什么它会从double变成single,但是我不知道是哪一个,米意思是现在正在改变。
为了通过使用SQL REPLACE来解决我的问题,现在是将单引号(“)转换为反斜杠和撇号(\),还是将双引号(”“)转换为反斜杠和撇号(\) ?
例如,这个:
SQL = " SELECT REPLACE(myColumn,"""","\'") FROM myTable "
或这个:
SQL = " SELECT REPLACE(myColumn,""","\'") FROM myTable "
我希望我自己解释清楚,一如既往地感激地接受任何build议。 有关我的问题的任何疑问,请评论。
非常感谢
– 更新 –
我已经尝试了以下查询,但仍然无法更改数据中的(“):
SELECT REPLACE(caption,'\"','\'') FROM photos WHERE photoID = 3371 SELECT REPLACE(caption,'"','\'') FROM photos WHERE photoID = 3371 SELECT REPLACE(caption,'""','\'') FROM photos WHERE photoID = 3371
但是,如果我search:
SELECT COUNT(*) FROM photos WHERE caption LIKE '%"%'
我得到16,150行。
– 更新2 –
那么,我已经创build了一个“解决方法”。 我设法很快地使用这个SQL编写一个ASP脚本来转换整个列:
SELECT photoID, caption FROM photos WHERE caption LIKE '%""%';
然后在ASP中,我做了:
caption = Replace(caption,"""","\'")
但是我仍然想知道为什么我无法用SQL实现这个function?
只要运行SELECT
语句就不会影响数据。 您必须使用REPLACE
的UPDATE
语句来进行更改:
UPDATE photos SET caption = REPLACE(caption,'"','\'')
这是一个工作示例: http : //sqlize.com/7FjtEyeLAh
replace下面的字符
~ ! @ # $ % ^ & * ( ) _ + ` - = { } | [ ] \ : " ; ' < > ? , .
与此SQL
SELECT note as note_original, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(note, '\"', ''), '.', ''), '?', ''), '`', ''), '<', ''), '=', ''), '{', ''), '}', ''), '[', ''), ']', ''), '|', ''), '\'', ''), ':', ''), ';', ''), '~', ''), '!', ''), '@', ''), '#', ''), '$', ''), '%', ''), '^', ''), '&', ''), '*', ''), '_', ''), '+', ''), ',', ''), '/', ''), '(', ''), ')', ''), '-', ''), '>', ''), ' ', '-'), '--', '-') as note_changed FROM invheader
也许我会走这个。
SQL = SELECT REPLACE(myColumn, '""', '\'') FROM myTable
我使用了单引号,因为那是在MySQL中注册stringexpression式的,或者我相信。
希望有所帮助。
如果你有“某些东西”,需要“某些东西”,用replace(col, "\"", "\'")
和反之亦然。