【问题标题】:DB2 SQL Query Trim inside trimDB2 SQL 查询 Trim inside trim
【发布时间】:2015-04-21 14:04:37
【问题描述】:

我正在将一些 SQL 查询转换为 C# 代码,现在我在理解以下查询时遇到了问题。 到目前为止,我对以下查询的理解是:如果PREFIX 介于099 之间,则修剪PREFIX,但|| '-' || 在这里是什么意思?我对第 3 行的理解是在完成第 2 行的修剪功能后,再做一次修剪,但我也不认识第 3 行的语法。这是 DB2。

            RETURN CASE WHEN PREFIX BETWEEN '00' AND '99'      //line 1               
            THEN TRIM(PREFIX) || '-' ||                        //line 2  
            TRIM(TRIM(L '0' FROM DIGITS(CLNUMBER)))            //line 3

【问题讨论】:

  • 你确定这是 SQL Server 吗? SQL Server 没有TRIM 函数,也没有使用|| 追加字符
  • @ughai 抱歉,这是 DB2

标签: sql db2 trim


【解决方案1】:
  • DIGITS(CLNUMBER) 将存储在 CLNUMBER 中的数字作为带有前导零的字符串返回。
  • TRIM(L '0' FROM something) 删除前导零。
  • TRIM(something) 从某物中删除前导和训练空白。
  • ||连接字符串。

PREFIX 是一个字符串。如果它包含两位数,则完成一些处理:

  1. 首先你得到那个数字修剪,但由于条件不能有空白,所以你得到原始数字字符串,例如'12'。 (该条件适用于“01”,但忽略“1”或“1”。)
  2. 然后添加“-”,因此您有“12-”。
  3. 然后您将获得 CLNUMBER 作为字符串,其中前导零以及前导和训练空白已删除。假设 CLNUMBER 包含“0345”,那么您将得到“345”。
  4. 然后这也被连接起来,最终得到“12-345”。

【讨论】:

  • (The condition would work on '01' but ignore ' 1' or '1'.) 示例中没有“忽略”这些值的“条件”。 PREFIX 是一个字符串,因此可能涉及任何字符(包括空格)。当然,也许这样的条件应该在那里的某个地方。该代码暗示“A1”、“5R”和“ZZ”都是可能的。其中,'5R' 满足 CASE 条件,因为它介于 '00' 和 '99' 之间。
  • @user2338816:你是对的。 '5R' 确实满足条件,我猜'1' 也会满足条件,而'1' 不在那个范围内,因为空白不在'0' 和'9' 之间。我错了,你是对的; CASE 条件不限于两位数。
【解决方案2】:

您的代码执行以下操作。

Line1:如果你的前缀在'00' AND '99'之间

Line2:然后从前缀中修剪空格,然后附加-

第 3 行:然后通过首先从 CLNUMBER 中删除前导 0 来附加 CLNUMBER

您可以查找TRIM函数here的语法

【讨论】:

    【解决方案3】:

    或者我们可以使用 as CAST( STRING_NAME as VARCHAR(no as per required) ) 这适用于删除固定 no 的尾随空格

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2012-09-02
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多