sql - TSQL 替换为长度约束

标签 sql sql-server sql-server-2008 t-sql

因此,FIELD2 可以根据 Mycondition 的值返回 2 组字段连接为单个结果。

我的问题仅在 Mycondition = 1 时出现

如果 MyCondition = 1,那么我需要连接 INT_FIELD_ONE + 'A' + INT_FIELD_TWO。

串联不是问题。

问题是如果 INT_FIELD_ONE(为空)+ 'A' + INT_FIELD_TWO(为空),那么我必须返回任何内容。

如果字段 ONE 和 TWO 都为空,我的替换命令将起作用。但如果只有 1 个为 NULL 而另一个不是“A”,则无论如何都会被删除。如果 1 个字段不为空,则需要保留 A。

例如:

NULL + 'A' + NULL = 无

NULL + 'A' + xxxx = Axxxx

xxxx + 'A' + NULL = xxxxA

因此我需要使用结果长度约束> 1 的 TSQL 替换

有什么想法吗?

SELECT XXX,

CASE --Case Statement to Return Field2
         WHEN MyCondition = 1 THEN
       --Constraint on the Replace Starts Here
       REPLACE(
       Isnull(CAST(INT_FIELD_ONE AS VARCHAR), '') + 'A' +
       Isnull(CAST(INT_FIELD_TWO AS
                   VARCHAR), '')
         ,'A','')  
ELSE
        REPLACE(
        Coalesce(REPLACE(INT_FIELD_THREE, '', '-'), Isnull(INT_FIELD_THREE, '-'), INT_FIELD_THREE) +
                ' / ' + Coalesce(REPLACE(INT_FIELD_FOUR, '', '-'),
                        Isnull(INT_FIELD_FOUR, '-'), INT_FIELD_FOUR) + ' ', '- / - ',
        '')
END
AS FIELD2


FROM TABLEX

最佳答案

这个怎么样?

CASE WHEN MyCondition = 1 AND (INT_FIELD_ONE IS NOT NULL OR INT_FIELD_TWO IS NOT NULL) THEN concat..
     WHEN MyCondition = 1 THEN NULL -- at that point we know that both are null
     ELSE ... END

请注意,现在在执行连接时不需要 REPLACE 函数,因为您确定其中一个字段不为空

关于sql - TSQL 替换为长度约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765534/

相关文章:

sql - 如何在 SQL Server 中随时间插入纬度/经度?

sql-server - 导致循环的 FK SET NULL 设计的替代方案

sql-server-2008 - 在 sys.servers 中找不到服务器 'dbo'

mysql - 存储小时间隔的数据类型

sql - MySQL 在 FUNCTION 中返回 GROUP_CONCAT

sql - 行间相减

asp.net - 与 SQL Server 建立连接时发生与网络相关或特定于实例的错误

sql-server - 为空值存储位列?

c# - 无法将数据写入传输。 vs2017 ASP.net core 脚手架(MSSQL WINDOW 10)

sql - SQL Server 中的 DateDiff 舍入