27,579
社区成员
发帖
与我相关
我的任务
分享
----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-05-04 15:25:57
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
----------------------------------------------------------------------------------
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[col] [nvarchar](10))
INSERT INTO [tb]
SELECT '1','1' UNION ALL
SELECT '2','3' UNION ALL
SELECT '3','1,2,3'
--SELECT * FROM [tb]
-->SQL查询如下:
select *,[isnum]=isnumeric(col) from tb
/*
id col isnum
----------- ---------- -----------
1 1 1
2 3 1
3 1,2,3 1
(3 行受影响)
*/
--直接用isnumeric判断,如果为1就可以与其它数值算术运算,看来运算的不是那么通畅
select case isnumeric(col) when 1 then col else 0 end+1 from tb
/*
-----------
2
4
消息 245,级别 16,状态 1,第 1 行
在将 nvarchar 值 '1,2,3' 转换成数据类型 int 时失败。
*/
--如果把“1,2,3”转为money,再与另一值相加,则可以成功。
select cast(col as money)+1 from tb
/*
---------------------
2.00
4.00
124.00
(3 行受影响)
*/
CREATE FUNCTION dbo.SQL2KIsNumeric(@StringToTest nvarchar(max))
RETURNS int
AS
BEGIN
IF CHARINDEX(',', @StringToTest) > 0
BEGIN
RETURN 0
END
RETURN ISNUMERIC(@StringToTest)
END
SELECT @@VERSION
DECLARE @a table([id] [int],[col] [nvarchar](10))
INSERT INTO @a
SELECT '1','1' UNION ALL
SELECT '2','3' UNION ALL
SELECT '3','1,2,3'
-->SQL查询如下:
select * from @a where isnumeric(col)=1
/**
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Personal Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
(1 行受影响)
(3 行受影响)
id col
----------- ----------
1 1
2 3
(2 行受影响)
**/
select case isnumeric(col) when 1 then col else 0 end+1 from tb
/*
2
4
1
(所影响的行数为 3 行)
*/
--如果把“1,2,3”转为money,再与另一值相加,则可以成功。
select cast(col as money)+1 from tb
/*
---------------------
2.0000
4.0000
服务器: 消息 235,级别 16,状态 1,行 11
无法将 char 值转换为 money。该 char 值的语法有误。
*/
select cast(col as money)+1 from @a
--result
/**---------------------
2.0000
4.0000
服务器: 消息 235,级别 16,状态 1,行 10
无法将 char 值转换为 money。该 char 值的语法有误。
*/
SELECT @@VERSION
DECLARE @a table([id] [int],[col] [nvarchar](10))
INSERT INTO @a
SELECT '1','1' UNION ALL
SELECT '2','3' UNION ALL
SELECT '3','1,2,3'
-->SQL查询如下:
select *,[isnum]=isnumeric(col) from @a
/*
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
(所影响的行数为 1 行)
(所影响的行数为 3 行)
id col isnum
----------- ---------- -----------
1 1 1
2 3 1
3 1,2,3 0---这里
(所影响的行数为 3 行)
*/