识别保存在数据库中的值的类型为字符串



我有一个问题解决不了。

我从数据库中获得一个值。该值在数据库中保存为nvarchar

我需要了解值的类型。

例如:

  • 12.12.2012 ->日期时间
  • 15:00 ->时间
  • 67.45 -> Double

为了理解类型,我使用TryParse方法。

示例来理解如果它是DateTime,我执行以下代码:

DateTime valueConverted;
if(DateTime.TryParse(input.ToString(), out valueConverted))
{
   // IS DATETIME
}

问题是,如果从数据库得到的值是:

  • 0900
  • 009000

我想把它识别为字符串。问题是,转换为双精度类型成功,然后将值转换为value = 900的双精度类型。

如何识别像0900,00060这样的值不是double而是String

最简单的可能是匹配^0[0-9]+$

意识到这是一个不平凡的问题,你一定会发现你没有预料到的边缘情况。如果可能的话,我建议更改数据模型,或者在不同的列中存储不同的类型,或者使用单独的列表示存储的数据类型。

将所有内容存储为字符串通常是个坏主意。

这似乎过于简化了,但根据您的描述,它将达到目的:

if (!string.IsNullOrEmpty(input) &&
    input[0] == '0' &&
    input.All(c => char.IsDigit(c)))
{
    // We have a string.
}

可以使用regex-match

创建所有类型的数据类型格式字符串,并与regex匹配。

http://www.dotnetperls.com/regex-match

if (input.StartsWith("0"))
{
    // string
}
else
{
    // double
    var number = double.Parse(input);
}

相关内容

最新更新