是的。您可以在 SQL Server 中使用ISNUMERIC 插入destination table 之前检查source table 列中的值是否为数字。
源表
CREATE TABLE #SOURCE(SCOL VARCHAR(300))
INSERT INTO #SOURCE
SELECT 'ABC'
UNION ALL
SELECT '121'
UNION ALL
SELECT '-145.78'
UNION ALL
SELECT '200,000'
UNION ALL
SELECT N'£100.20'
UNION ALL
SELECT '0E0'
UNION ALL
SELECT N'₤'
目的地表
CREATE TABLE #DESTINATION(DCOL NUMERIC(5,2))
-- Only the numeric values will be inserted and is Type-safe
INSERT INTO #DESTINATION
SELECT SCOL
FROM #SOURCE
WHERE ISNUMERIC(SCOL)=1
SELECT * FROM #DESTINATION
编辑:
如果ISNUMERIC 不满足列中的值,请创建以下函数并检查WHERE 子句中列中的值。我从here得到了这个函数。
CREATE FUNCTION dbo.isReallyNumeric
(
@num VARCHAR(64)
)
RETURNS BIT
BEGIN
IF LEFT(@num, 1) = '-'
SET @num = SUBSTRING(@num, 2, LEN(@num))
DECLARE @pos TINYINT
SET @pos = 1 + LEN(@num) - CHARINDEX('.', REVERSE(@num))
RETURN CASE
WHEN PATINDEX('%[^0-9.-]%', @num) = 0
AND @num NOT IN ('.', '-', '+', '^')
AND LEN(@num)>0
AND @num NOT LIKE '%-%'
AND
(
((@pos = LEN(@num)+1)
OR @pos = CHARINDEX('.', @num))
)
THEN
1
ELSE
0
END
END
GO
并在查询中选择和插入,使用上面的函数
INSERT INTO #DESTINATION
SELECT SCOL
FROM #SOURCE
WHERE DBO.isReallyNumeric(SCOL)=1