我有一个用于从 csv 插入数据的存储过程。数据本身是多种类型、一些测试、一些日期和一些货币字段的混合。我需要保证保存这些数据,即使它的格式错误,所以,我将它们全部保存到 varchars。稍后,一旦数据经过验证和检查,它就会被移动到另一个具有适当数据类型的表中。
当我插入第一个表时,如果需要注意,我想检查一下在该行上设置一个标志(位列)。例如,如果应该是货币数字的内容中有字母,我需要标记该行并将列名添加到我得到的额外错误消息字段中。然后我可以使用该标志在界面中为用户查找并突出显示他们需要编辑的字段。
日期参数似乎很简单,我可以使用 IF ISDATE(@mydate) = '0'
来测试该参数是否可以从 varchar 转换为 datetime。但是,我似乎找不到 ISMONEY() 或任何远程等效的东西。
有谁知道调用什么来测试 varchar 的内容是否可以合法地转换为金钱?
编辑: 我还没有测试过,但是你觉得这样的功能怎么样?:
CREATE FUNCTION CheckIsMoney
(
@chkCol varchar(512)
)
RETURNS bit
AS
BEGIN
-- Declare the return variable here
DECLARE @retVal bit
SET @chkCol = REPLACE(@chkCol, '$', '');
SET @chkCol = REPLACE(@chkCol, ',', '');
IF (ISNUMERIC(@chkCOl + 'e0') = '1')
SET @retVal = '1'
ELSE
SET @retVal = '0'
RETURN @retVal
END
GO
更新
刚测试完上面的代码,成功了!
最佳答案
money实际上是小数,所以你这样测试
不过不要直接使用 ISNUMERIC:它不可靠。使用这个:
ISNUMERIC(MyCOl + 'e0')
请注意,如果您有 6 位小数,那么在转换为货币时会丢失
具有更多信息的其他问题:How to determine the field value which can not convert to (decimal, float,int) in SQL Server
编辑:
如果你愿意,可以一行完成
ISNUMERIC(REPLACE(REPLACE(@chkCOl, '$', ''), ',', '') + 'e0')
关于sql - 在 SQL Server 2008 中,如何检查 varchar 参数是否可以转换为数据类型 money?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4612798/