作者CRUD (CRUD)
看板Database
标题[SQL ] MSSQL2005-请问这个function的错误如何修正?
时间Sun Dec 9 11:23:52 2007
环境:使用MS SQL2005
需求:将user提供的日期资料转换成int型态
日期资料包括两种
一个是yyyymmdd格式,varchar型态
一个是datetime格式
如果资料非合法的日期则回传0
以下是测试资料的Script
--------------------------------------------------
CREATE TABLE [dbo].[TB_TEST](
[DATE_DATETIME] [datetime] NULL,
[DATE_CHAR] [varchar](20) NULL
) ON [PRIMARY]
GO
INSERT INTO TB_TEST
SELECT GETDATE(),'2007/12/12'
GO
--------------------------------------------------
CREATE FUNCTION [dbo].[FX_Convert_Date]
(@COL VARCHAR(10)) --此次要处理的栏位
RETURNS INT
AS
BEGIN--FUNCTION BEGIN
DECLARE @RTN_VALUE INT
BEGIN
SELECT @RTN_VALUE = CASE WHEN ISDATE(RTRIM(LTRIM(@COL)))=0 THEN NULL
ELSE CAST(CONVERT(VARCHAR(8),@COL,112) AS INT)
END
GOTO RTN
END
RTN:
RETURN @RTN_VALUE
END--FUNCTION END
----------------------------------------------------------
测试方法:
SELECT dbo.FX_Convert_Date(DATE_DATETIME)
FROM TB_TEST
目前处理varchar的日期是OK的
但处理datetime型态的资料时会出错
错误讯息:
讯息 245,层级 16,状态 1,行 1
将 varchar 值 '12 9 20' 转换成资料类型 int 时,转换失败。
我不使用func,直接把ELSE CAST xxxx 这段拿来处理datetime资料是OK的
SELECT CAST(CONVERT(VARCHAR(8),GETDATE(),112) AS INT)
因此不晓得问题是出在透过func的关系吗?
想请板上的朋友们帮我debug一下
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.64.83.10