我遇到了一个包含以下代码的查询,表中的城市是巴黎。
SQL >select INITCAP (cust_first_name | | ' ' | |
UPPER (SUBSTR ( cust_city,
-LENGTH(cust_city), 2)))
FROM customers WHERE first_name = 'Abigail';
我的问题是关于length子句的,因为它前面似乎有一个负号,但是我不确定它的目的是什么。
有人可以帮我分解这个吗?
此查询的结果是:Abigail Pa
答案 0 :(得分:1)
那是一种很奇怪的做事方式!
在SUBSTR
的开始位置参数中使用负数表示从字符串末尾开始计数。
因此,在您的查询中,对于长度为N的cust_city,SUBSTR从字符串末尾的第N个字符开始。
这实际上意味着SUBSTR
从字符串开头的第一个字符开始,这意味着您的查询可以被重写:
select initcap(cust_first_name||' '||upper(substr(cust_city, 1, 2)))
from customers
where first_name = 'Abigail';
此外,UPPER
是多余的;当附加在字符串上的字符串在整个字符串上移到INITCAP
时,强制cust_city的前两个字符大写的意义是什么?
因此,我将按照以下方式编写您的查询:
select initcap(cust_first_name||' '||substr(cust_city, 1, 2))
from customers
where first_name = 'Abigail';
更简单,更容易理解恕我直言!