有人可以向我解释这个PHP / SQL试图完成的内容

时间:2011-09-20 14:46:19

标签: php postgresql

我被要求解决客户网站的问题,我认为这条线至少是造成错误的部分原因:

$SQL="select 'SC' ||substr(10000+max(to_number(secondid, '99G999D9S'))+1,2,4) from table";

我不能完全说出上面的这一行试图完成的是什么,它是否只是一段错误的代码,没有正确编写或者是一些重要且经过深思熟虑的代码。我知道substr是一个PHP函数,然而,它是双引号,所以它是查询的一部分,我也知道max和to_number是postgresql函数。 我不知道SC是什么,它不是表中的字段。如果我自己运行此查询:

SELECT 'SC' FROM table;

我得到一个?列?(未知类型),行数比表中的行数大一个(如果在每个表的末尾包含空行,则行数相同)。每行简单地表示保持SC。 什么是||的重点运营商?如果我没记错,那是一个OR运算符,那么查询如何决定它想要选择什么?

抱歉,感谢你的时间。

2 个答案:

答案 0 :(得分:4)

在内外工作:

原始陈述:

$SQL="select 'SC' ||substr(10000+max(to_number(secondid, '99G999D9S'))+1,2,4) from table";

组件:

'99G999D9S'
特定格式:2位+组分隔符+ 3位+小数点+ 1位+符号。

to_number(secondid, '99G999D9S')
使用上述格式将secondid字段转换为数字。

max(...)
标准SQL最大函数。

10000+max(...)+1
将10,001添加到最大结果

substr(...,2,4)
从char位置2开始,从前一个结果中提取4个字符。

SC || substr(...)
将上面的字符串与SC连接起来。

答案 1 :(得分:1)

查询采用字段secondid的值,使用99G999D9S将其转换为数字,然后在表中找到这些值的最大值,向其中添加10000和1;将结果转换为字符串,从第二个字符开始获取子字符串4-char long;最后添加字符串' SC'并返回给你。对于定义了secondid列并相应格式化的表,您将获得正好1个结果。如果未定义此列或格式不同,则会出现错误。

||运算符是SQL中的串联。