Mysql 如何基于具有Like的函数进行选择?

Mysql 如何基于具有Like的函数进行选择?,mysql,sql,Mysql,Sql,从另一个线程我得到了这个函数: CREATE FUNCTION dbo.ShowWhiteSpace (@str varchar(8000)) RETURNS varchar(8000) AS BEGIN DECLARE @ShowWhiteSpace varchar(8000); SET @ShowWhiteSpace = @str SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(32), '[?]')

从另一个线程我得到了这个函数:

CREATE FUNCTION dbo.ShowWhiteSpace (@str varchar(8000))
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @ShowWhiteSpace varchar(8000);
    SET @ShowWhiteSpace = @str
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(32), '[?]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(13), '[CR]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(10), '[LF]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(9),  '[TAB]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(1),  '[SOH]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(2),  '[STX]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(3),  '[ETX]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(4),  '[EOT]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(5),  '[ENQ]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(6),  '[ACK]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(7),  '[BEL]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(8),  '[BS]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(11), '[VT]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(12), '[FF]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(14), '[SO]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(15), '[SI]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(16), '[DLE]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(17), '[DC1]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(18), '[DC2]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(19), '[DC3]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(20), '[DC4]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(21), '[NAK]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(22), '[SYN]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(23), '[ETB]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(24), '[CAN]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(25), '[EM]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(26), '[SUB]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(27), '[ESC]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(28), '[FS]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(29), '[GS]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(30), '[RS]')
    SET @ShowWhiteSpace = REPLACE( @ShowWhiteSpace, CHAR(31), '[US]')
    RETURN(@ShowWhiteSpace)
END


select DBO.SHOWWHITESPACE(ITEM_NUM) FROM ITEM
我得到了一个列表,其中有几行在末尾加了[CR][LF]。所以我只想选择那些,这样我就可以同时替换它们。我该怎么做

我的想法是这样做。。。但它什么也不返回。我知道它应该返回4行

select DBO.SHOWWHITESPACE(i.ITEM_NUM) as ITEN_NUM 
FROM ITEM i
WHERE i.ITEM_NUM LIKE '%CR%'

您还需要在WHERE子句中应用函数,以仅获取包含CR的行:

编辑:

我的印象是,根据你在评论中所说的,你正在寻找一个更新,用函数的结果修改专栏的内容。如果是这种情况,您需要的是以下查询:

UPDATE ITEM
SET ITEM_NUM = DBO.SHOWWHITESPACE(ITEM_NUM)
这将更新所有行,因此,如果您只想更新包含CR的4行,则需要添加WHERE子句,从而将查询转换为:

UPDATE ITEM
SET ITEM_NUM = DBO.SHOWWHITESPACE(ITEM_NUM)
WHERE DBO.SHOWWHITESPACE(ITEM_NUM) LIKE '%CR%'

后续问题。。。如何更新真实数据库中的这些行?从项目r中选择项目_NUM,其中r.ITEM _NUM在项目i中选择DBO.SHOWWHITESPACEi.ITEM _NUM作为项目_NUM,其中DBO.SHOWWHITESPACEi.ITEM _NUM类似于“%CR%”->这当前将不返回任何内容。ITEM_NUM是键。@DanAndersson当然,这不会返回任何内容,因为您原来的r.ITEM_NUM与从DBO.SHOWWITESPACEi.ITEM_NUM获得的结果不同,因为你在函数中替换了字符,而这两个字符是不同的。是的,我想了很多,意识到这样做行不通,并对4行进行了手动更改。但在未来,我想知道如何通过代码做到这一点:@DanAndersson code?您的意思是使用不同于SQL的语言?谢谢。我假设我可以通过将UPDATE切换为delete来使用相同的方法删除这4行。
UPDATE ITEM
SET ITEM_NUM = DBO.SHOWWHITESPACE(ITEM_NUM)
WHERE DBO.SHOWWHITESPACE(ITEM_NUM) LIKE '%CR%'