mysql - 当我使用子字符串时,起点是 1,而不是零 (0)
问题描述
我使用 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
但是当我在 W3school 或某些网站上阅读时,它说起点是
0。Somone 能告诉我为什么吗?
解决方案
不确定您看到了什么,但MySql 的 W3Schools 文档显示了这一点:
注意
字符串中的第一个位置是1
MySql 官方是这样的:
将要从中提取子字符串的字符串中第一个字符的位置记为 1。
以下是其他一些:
start
是一个整数或 bigint 表达式,它指定返回的字符从哪里开始。(编号从 1 开始,表示表达式中的第一个字符是 1)。
start_pos 必需。开始提取的位置。字符串中的第一个位置是 1
当位置为 0(零)时,则将其视为 1。
而且这些都不符合ansi标准,这很奇怪,需要额外的FROM
和FOR
关键字,而不是简单的“正常”函数语义。
<character substring function> ::=
SUBSTRING <left paren> <character value expression> FROM <start position>
[ FOR <string length> ] <right paren>
Postgresql 是我所知道的唯一支持该语法的数据库。
推荐阅读
- java - Git rebase 回到功能开始
- error-handling - 我的 kafka 错误处理程序没有被调用,我应该显式调用吗?
- mysql - 如果列存在,则在 SQL 中编辑默认值
- javascript - 当“.value = ***”似乎无法识别时,如何使用 JS 填写简单的输入字段?
- moleculer - Moleculer DBService 中的严格集合/表名设置
- c# - AppService 连接会导致应用程序挂起吗?
- git - 为什么我在 Source Tree 中收到“无法从重定向更新 url base”错误?
- javascript - 合并两个 CSS 类,从一个框架获取网格,从另一个框架获取样式
- javascript - 在输入更改时发送多个 http 请求并应用最后一次更改
- gcloud - 在 gcloud 上设置的 VM 实例如何包含 fast.ai 教程?