在SQL中获取字符串的长度

3
我正在尝试在SQL中获取字符串的长度(使用Firebird版本2.x+)。 无论何时选择一个字符串的长度,它都会给出该字符串实际分配的最大长度,而不是获取记录中占用多少个字符的长度,您可以在这里看到:

enter image description here

如你所想象的那样,这对我没有帮助,因为我无法按长度排序,因为我试图按一个已分配了常数长度的属性排序。

我该如何实现我想要实现的目标呢?也就是:获取字符串中取了多少个字符的长度。


2
你的列是CHAR还是VARCHAR? - Charlie L
3
数据类型是CHAR,这似乎没有意义,但数据库是由我的教授创建的,其中一个任务是按名称长度排序。我仍然不确定他是否犯了错误或者是否有一种方法可以计算CHAR中所占用的字符数。 - aakk
你手头没有 Firebird 的副本,但是难道没有可用的 Trim()、RTrim() 或 LTrim() 标量函数吗? - Ken White
1
https://firebirdsql.org/refdocs/langrefupd20-char-length.html - 如果您想要获取“逻辑”长度,而不计算尾随空格,请在将参数传递给CHAR[ACTER]_LENGTH之前进行右TRIM操作。 - Barbara Laird
1
请将您的屏幕截图转换为文本形式,特别是查询本身。 - Mark Rotteveel
1个回答

4

根据char_length的文档:

注意事项

  • 对于类型为CHAR的参数,此函数返回正式字符串长度(即字段或变量的声明长度)。如果要获取“逻辑”长度,不计算尾随空格,请在将其传递给CHAR[ACTER]_LENGTH之前对参数进行右侧TRIM

这样做的原因是char值会用空格填充到声明的长度,因此它们实质上始终具有声明的长度。

换句话说,您需要使用:

char_length(trim(trailing from imeprodajalca))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接