当我使用substring时,起点是1,而不是零(0)

tquggr8v  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(1142)

我使用的是mysql,而不是sql,我有这个表,我想选择这个表,不带“m”,这是我创建的表

CREATE TABLE test (
  id VARCHAR(10)
);  
INSERT INTO test (id) VALUES ('M1');  
INSERT INTO test (id) VALUES ('M2');
.... 
INSERT INTO test (id) VALUES ('M128');  
INSERT INTO test (id) VALUES ('M129');

我希望代码选择如下:

Select Substring(id,1) from test

结果来自“m1”->“m129”,但当代码如下:

Select Substring(id,2) from test

结果来自1->129,因此起点是1,而不是0
但当我在学校或网络上阅读时,它说起点是0。
有人能告诉我为什么吗?

dl5txlt9

dl5txlt91#

不确定您看到了什么,但W3Docs for mysql显示:
笔记
字符串中的第一个位置是1
mysql官方是这样的:
要从中提取子字符串的字符串中的第一个字符的位置被认为是1。
以下是其他一些:
sql server官方
开始
是一个整数或bigint表达式,指定返回字符的起始位置(编号基于1,这意味着表达式中的第一个字符是1)。
sql server学校
开始位置      必修的。开始提取的位置。字符串中的第一个位置是1
甲骨文官员
当位置为0(零)时,则将其视为1。
这些都不符合ansi标准,这很奇怪,需要额外的 FROM 以及 FOR 关键字而不是简单的“正常”函数语义。

<character substring function> ::=
    SUBSTRING <left paren> <character value expression> FROM <start position>
    [ FOR <string length> ] <right paren>

postgresql是我所知道的唯一一个支持这种语法的数据库。

dl5txlt9

dl5txlt92#

mysql的子字符串语法是

SUBSTR(string,position)
SUBSTR(string,position,length)

对于mysql来说,子字符串从位置1开始工作是正确的(w3school是正确的)。您是如何看待子字符串中的“position”值的。
位置上的数字是这样工作的
根据你的第一个询问

Select Substring(id,1) from test

意思是从位置1开始
(注意:记住此位置值并不意味着从位置1删除或(删除)。它意味着从起始位置1选择)
结果是m1,m2,m128,m129
根据你的第二个问题

Select Substring(id,2) from test

位置2表示“从1开始。擦除从位置1到位置2的id值(记住直到2不使用2)
对于结果是1,2128129(刚刚删除位置1值)
最后一个例子是

SELECT SUBSTRING('Engineer',5);

因此它将从位置1“e”开始擦除字符,直到位置5表示“n”(位置5的未擦除值)
所以结果是‘neer’

3ks5zfa0

3ks5zfa03#

当我看它的时候,它声称1:

https://www.w3schools.com/sql/func_mysql_substring.asp

相关问题