【问题标题】:Combine data types in SQL Server在 SQL Server 中组合数据类型
【发布时间】:2015-04-22 18:36:18
【问题描述】:

有没有办法在 SQL Server 中组合数据类型?即单元格的值既是文本又是数字,其中文本始终相同?

我有一张名为Contract 的表。 ContractID 字段的值应为:“TCwxyz”,其中“TC”是字符串字符,“wxyz”是整数。

我有以下,但它似乎没有工作:

CREATE TYPE TenantContracts AS CHAR(6)
CHECK (SUBSTRING(VALUE,1,2)='TC'
AND (SUBSTRING(VALUE,2,4) AS SMALLINT)

任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server dns


    【解决方案1】:

    约束被添加到表定义中,您不需要创建类型。

    ALTER TABLE Contract
    ADD CONSTRAINT chk_ContractID CHECK (
        SUBSTRING(ContractID, 1, 2) = 'TC'
        AND ISNUMERIC(SUBSTRING(ContractID, 3, 4)) = 1
    )
    

    此解决方案将接受一些不正确的值,例如TC1.01。我只是为了简单起见而使用它,而不是试图确定最后 4 位数字是否是整数,这变得非常棘手 (T-sql - determine if value is integer)。

    编辑:如果您确实想要进行更可靠的整数检查,最好单独检查最后 4 个字符中的每一个是否都是数字:

    ALTER TABLE Contract
    ADD CONSTRAINT chk_ContractID CHECK (
        SUBSTRING(ContractID, 1, 2) = 'TC'
        AND ISNUMERIC(SUBSTRING(ContractID, 3, 1)) = 1
        AND ISNUMERIC(SUBSTRING(ContractID, 4, 1)) = 1
        AND ISNUMERIC(SUBSTRING(ContractID, 5, 1)) = 1
        AND ISNUMERIC(SUBSTRING(ContractID, 6, 1)) = 1
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2015-06-25
      相关资源
      最近更新 更多