sql - 在 SQL Server 2008 中,如何检查 varchar 参数是否可以转换为数据类型 money?

标签 sql sql-server sql-server-2008 currency

我有一个用于从 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/

相关文章:

sql - WHERE(一组条件)OR(一组第二个条件)OR ...优雅地写

mysql - 返回 0 是特定条件为 NULL 时的计数

sql-server - 如何从 XML 文件中提取元素?

c# - 在 C# 中检索 SQL Server 输出变量

具有多个外连接的 SQL 查询

sql - 基于存储在字段中的查询运行 SQL?

sql - 在 sql 中跟踪记录随时间的更新有哪些最佳实践?

sql-server - SQL Server 2008 页面/行压缩思路

sql-server-2008 - 如何将数据从 SQL Server 插入到 SQL Azure?

sql-server-2008 - 高容量 SQL Server 2008 的关键数据类型?