【问题标题】:determine DB2 text string length确定 DB2 文本字符串长度
【发布时间】:2012-07-06 00:52:39
【问题描述】:

我正在尝试找出如何编写一个 SQL 语句来获取字符串不是 12 个字符长的字段。如果它们是 10 个字符,我只想获取字符串。

DB2 中有什么函数可以做到这一点?

我想它会是这样的,但我在上面找不到任何东西。
select * from table where not length(fieldName, 12)

【问题讨论】:

  • 等等 - 你想获取 特定 列('field')包含的数据长度为 10 个字符的 rows,还是你想要获取所有行的 unknown 列,其中列中的所有值(或列名)都是 10 个字符长?
  • 我想从 id 号列中获取所有行。有些身份证号码长 10 位,有些是 9 位,有些是 12 位。除了 12 位数字之外,我想要所有的。
  • 该列实际上是数字类型,还是您在 Id 中使用数字字符?如果它实际上是一个数字列,只需进行简单的数字比较。如果是包含数字的字符串,请不要有前导零...
  • 这是一个文本字段。对不起。只是碰巧它们暂时都是数字的。但是,是的,该字段是文本类型。
  • 嗯,一个(当前)只包含数字的自然键 id 字段文本是可以的 - 期望在某些时候您可能有其他字符。我只是不建议允许前导零,因为您的用户可能没有意识到它们的重要性。然而,在一般情况下,大卫的答案应该是可行的。

标签: sql db2


【解决方案1】:

来自类似问题DB2 - find and compare the lentgh of the value in a table field - 添加 RTRIM,因为 LENGTH 将返回列定义的长度。这应该是正确的:

select * from table where length(RTRIM(fieldName))=10

27.5.2019 更新:可能在较旧的 db2 版本上,LENGTH 函数返回列定义的长度。在 db2 10.5 上,我尝试了该函数,它返回数据长度,而不是列定义长度:

select fieldname
, length(fieldName) len_only
, length(RTRIM(fieldName)) len_rtrim
from (values (cast('1234567890  ' as varchar(30)) )) 
as tab(fieldName)

FIELDNAME                      LEN_ONLY    LEN_RTRIM
------------------------------ ----------- -----------
1234567890                              12          10

可以用这个词来测试一下:

where length(fieldName)!=length(rtrim(fieldName))

【讨论】:

  • 这就是诀窍!它像 OP 要求的那样获取字符串的实际长度,而不是列的长度。
  • 谢谢,很好的提示!
  • 这是不正确的。它将返回字段长度,而不是字符长度
【解决方案2】:

这将抓取长度为 10 个字符的字符串(在 fieldName 列中)的记录:

 select * from table where length(fieldName)=10

【讨论】:

【解决方案3】:

我们主要写下面的语句 select * from table where length(ltrim(rtrim(field)))=10;

【讨论】:

  • 嗨,欢迎来到 Stackoverflow!如果您在回答任何问题之前可以read these guidelines,那就太好了。谢谢。
  • 以上是公认的答案不正确。这对我有用
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2021-12-27
  • 2014-04-08
  • 2021-02-18
  • 2011-09-08
相关资源
最近更新 更多