这段时间学习了一下JAVA和JAVASCRIPT的正则表达式,没想到立刻又要处理sql的正则表达式了(可能不需要用到正则表达式)。
之前有个系统模块里面,出了点差错,忘记在页面输入的内容(用textarea)输入的,把\r\n替换为<p>了。现在已经输入了好多条记录了。于是想用replace在服务器端的数据库里面,来批量全部把列里面的\r\n,全部替换成<p>。结果操作不成功。
后来试了一下,发现还挺麻烦的。
搜索的时候,语句
select * from tableName where columnName like '%AAA%'
是可以找到内容出来的,但
select * from tableName where columnName like '%\n%' or columnName like '%\r%'
却找不到内容出来,要改为
select * from tableName where columnName like '%[\n]%' or columnName like '%[\r]%'
才能找到。
1、所以请问:是不是所有特殊字符都必须这样,才能进行搜索呢?另外还有一个可用于搜索的关键词,charIndex函数。语句如下:
select * from tableName where charIndex('[\r]', columnName)>0 --0行,不论有没有[]都是是0行
2、请问charIndex()到底能否用于特殊字符的搜索?3、用replace()函数进行替换的时候,语句如下:
update talbeName set columnName=replace(columnName, '\n','<br>') where columnName like '%[\n]%'
不论有没有[],都不能成功。
请问应该如何写呢?谢谢。

解决方案 »

  1.   

    都说是“特殊字符”了,\r\n当然是指回车和换行啦。
    既然有同学提醒,那么顺便问问,如果查找\r\n连在一起的组合,应该怎样写?SQL正则表达式的正则又是怎写的?很奇怪,在页面的textarea输入了回车和换行,在JAVA端接收,可以显示是收到了“\r\n”的,但怎么在数据库的列里面,多数的内容,都是\n和\r分开的,都是要么只有\r,要么只有\n的?
      

  2.   

    为什么会出现楼主的情况?!
    create table tablename(columnname varchar(30))
    insert into tablename select 'asdf\r\nasdfwe'
    go
    select * from tablename where columnname like '%\r\n%'
    /*
    columnname
    ------------------------------
    asdf\r\nasdfwe(1 行受影响)*/
    update tablename set columnname=replace(columnname,'\r\n','<p>') where columnname like '%\r\n%'
    select * from tablename
    /*
    columnname
    ------------------------------
    asdf<p>asdfwe(1 行受影响)*/
    go
    drop table tablename楼主是在什么地方操作数据的?
      

  3.   

    我都觉得很郁闷???用
    select * from tableName where columnName like '%[\n]%'
    可以找到4行出来,用
    select * from tableName where columnName like '%\n%'
    却一行都找不到。
      

  4.   

    还有,用char(10)和char(13)就都可以找到95行出来,应该是不对的。写法如下:
    select * from tableName where charIndex(char(13), columnName)>0
    select * from schedule where content like '%'+char(13)+'%'
      

  5.   

    回6楼:
    你用这种方式输入到数据库的数据,结果直接可以看到的“\r\n”的,但在页面用textarea输入,然后再保存到数据库的内容,是看不到\r\n这四个字符的。
    所以操作上来说,应该是不同的。在数据库这边,就当成你输入的是四个普通字符了,而不是“回车符”和“换行符”了。
      

  6.   

    create table tb(columnname nvarchar(30))
    gosetchar.htm:
    <html>
    <body>
    <form method="POST" action="setchar.asp">
    <p><textarea rows="2" name="S1" cols="20"></textarea><input type="submit" value="提交" name="B1"></p>
    </form>
    </body>
    </html>
    setchar.asp
    <%
    set my_conn=server.createobject("adodb.connection")
    str="driver={sql server};server=MYSQLSERVER;uid=sa;pwd=mypass;database=test"
    my_conn.open(str)setchar=request.Form("S1")if setchar<>"" then
    strSql="insert into tb select '" & setchar & "'"
    my_Conn.execute(strSql)
    response.write "<p>插入成功</p>"
    end ifstrSql="select * from tb where columnname like '%\r\n%'"
    set rs = my_Conn.execute(strSql)
    while not rs.eof
    response.write rs(0) & "<br>"
    rs.movenext
    wend
    %>
    <p><a href="setchar.htm">重新添加</a></p>result:
    插入成功你好\r\n今天是...
    再来一条,换行后用符号: \r\n 再来一句.
    再来一条,换行后用符号: \r\n 再来一句.
    再来一条,换行后用符号: \r\n 再来一句.重新添加
      

  7.   

    页面输入后在数据库中检索:
    select * from tb
    /*
    columnname
    ------------------------------
    你好!
    你好\r\n今天是...
    再来一条,换行后用符号:
    \r\n
    再来一句.
    再来一条,换行后用符号:
    \r\n
    再来一句.
    再来一条,换行后用符号:
    \r\n
    再来一句.(5 行受影响)*/不明白这和楼主的有何区别.
      

  8.   

    在MSSQL里再操作:
    select * from tb where columnname like '%\r\n%'
    /*
    columnname
    ------------------------------
    你好\r\n今天是...
    再来一条,换行后用符号:
    \r\n
    再来一句.
    再来一条,换行后用符号:
    \r\n
    再来一句.
    再来一条,换行后用符号:
    \r\n
    再来一句.(4 行受影响)*/
    go
    update tb set columnname=replace(columnname,'\r\n','<p>') where columnname like '%\r\n%'
    select * from tb
    go
    /*
    columnname
    ------------------------------
    你好!
    你好<p>今天是...
    再来一条,换行后用符号:
    <p>
    再来一句.
    再来一条,换行后用符号:
    <p>
    再来一句.
    再来一条,换行后用符号:
    <p>
    再来一句.(5 行受影响)*/
      

  9.   

    如果我回答错了。
    不,懂;帮,顶;学,习;赚,分。
    虽然这么回贴可能会被删除。
    谁他妈的删除了就是个王八蛋。
    强烈抗议CSDN这种即当婊子又想立贞洁牌坊的恶劣行为!!!
    有本事,就封杀我!!!理由在这里:
    他妈的一帮管理员有神经病啊???
    http://topic.csdn.net/u/20110422/10/1a381057-7a7b-41d9-8969-ad1f5b77f24a.html?38665
    最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
    如果有多表,表之间如何关联?
    如何更有效地在SQL Server论坛上提问
    http://topic.csdn.net/u/20100716/19/6f132f16-20e4-418c-8dee-b99d5f86d320.html?75910
    [code=SQL]
      

  10.   

    如果我回答错了。
    不,懂;帮,顶;学,习;赚,分。
    虽然这么回贴可能会被删除。
    谁他妈的删除了就是个王八蛋。
    强烈抗议CSDN这种即当婊子又想立贞洁牌坊的恶劣行为!!!
    有本事,就封杀我!!!理由在这里:
    他妈的一帮管理员有神经病啊???
    http://topic.csdn.net/u/20110422/10/1a381057-7a7b-41d9-8969-ad1f5b77f24a.html?38665
    最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
    如果有多表,表之间如何关联?
    如何更有效地在SQL Server论坛上提问
    http://topic.csdn.net/u/20100716/19/6f132f16-20e4-418c-8dee-b99d5f86d320.html?75910
    [code=SQL]