日期:2014-05-18  浏览次数:20435 次

怎样去掉字符串中的中文?
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER FUNCTION [dbo].[GET_NUMBER2](@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
这个函数我执行,发现只能去掉其中一个字符串的中文,如果参数@s为一列的列名,执行结果居然都是同一个结果

------解决方案--------------------
SQL code
ALTER FUNCTION [dbo].[GET_NUMBER2](@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[吖-座]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[吖-座]%',@s),1,'')
END
RETURN @S
END

------解决方案--------------------
SQL code
select *,dbo.GET_NUMBER2([列名]) from tb --列名不能加引号

------解决方案--------------------
你这个提取数字的吗?
------解决方案--------------------
SQL code

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
    DROP TABLE tba
END
GO
CREATE TABLE tba
(
    col1 VARCHAR(100)
)
GO
INSERT INTO tba
SELECT '3445wersrede23sde' UNION
SELECT '937846rdjkdie37334'
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'GET_NUMBER2')
BEGIN
    DROP FUNCTION GET_NUMBER2
END
GO
CREATE FUNCTION GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO

SELECT dbo.GET_NUMBER2(col1) AS col1
FROM tba

col1
344523
93784637334