mysql和sqlserver中substring(order_date,int,int)的区别
Posted 普通网友
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql和sqlserver中substring(order_date,int,int)的区别相关的知识,希望对你有一定的参考价值。
mysql和sqlserver中substring(order_date,int,int)的区别
select a.*,b.goods_name,b.goods_shichangjia*nums totalfee from (select sum(goods_quantity) nums,goods_id from t_orderitem where order_id in
(select order_id from t_order where substring(order_date,1,7)='2019-03' ) group by goods_id )
a left join t_goods b on a.goods_id = b.goods_id and b.goods_del='no'
同样的这句话,在sqlserver中可以正常显示
但是在mysql中
却查到是空,我很好奇,也很疑惑,难道哪里写错了,级联错了吗,还是join on那里,不可能啊,不可能有错啊
于是我把每句话拆分来看
select sum(goods_quantity) nums,goods_id from t_orderitem 结果是7 2
这句话没有错,正常,但是select order_id from t_order where substring(order_date,0,8)='2019-03' 查到为空
这就是不对了,不可能的,那么这句话错在哪里了呢?我发现,出现substring(order_date,int,int)上
原来在sqlsever中截取字段从0开始,mysql从1开始
好了,可以正常显示了
SUBSTRING
函数从特定位置开始的字符串返回一个给定长度的子字符串。 mysql提供了各种形式的子串功能。
我们将在以下部分中检查SUBSTRING
函数的每种形式。
-
SUBSTRING(string,position);
-
SUBSTRING(string FROM position);
有两个参数:
string
参数是要提取子字符串的字符串。position
参数是一个整数,用于指定子串的起始字符,position
可以是正或负整数。
如果position
为正,则SUBSTRING
函数从字符串的开始处提取子字符串。请参阅以下字符串。
例如,要从“MySQL SUBSTRING
”字符串中获取子字符串:“SUBSTRING
”,子串的位置必须从7
开始,如以下SELECT语句:
-
mysql> SELECT SUBSTRING('MYSQL SUBSTRING', 7);
-
+---------------------------------+
-
| SUBSTRING('MYSQL SUBSTRING', 7) |
-
+---------------------------------+
-
| SUBSTRING |
-
+---------------------------------+
-
1 row in set
请注意,如果position
参数为零,则SUBSTRING
函数返回一个空字符串:
-
mysql> SELECT SUBSTRING('MYSQL SUBSTRING', 0);
-
+---------------------------------+
-
| SUBSTRING('MYSQL SUBSTRING', 0) |
-
+---------------------------------+
-
| |
-
+---------------------------------+
-
1 row in set
除了特定于MySQL的语法之外,可以使用SQL标准语法与FROM
关键字一起调用SUBSTRING
函数。
例如,以下语句使用SQL标准语法从"MySQL SUBSTRING"
字符串中获取"SUBSTRING"
:
-
mysql> SELECT SUBSTRING('MySQL SUBSTRING' FROM -10);
-
+---------------------------------------+
-
| SUBSTRING('MySQL SUBSTRING' FROM -10) |
-
+---------------------------------------+
-
| SUBSTRING |
-
+---------------------------------------+
-
1 row in set
MySQL SUBSTRING具有位置和长度
如果要指定要从字符串中提取的子字符串的长度,可以使用以下形式的SUBSTRING
函数:
SUBSTRING(string,position,length);
以下是上述语句的SQL标准版本,它更长,但更具表现力。
SUBSTRING(string FROM position FOR length);
除了string
和position
参数之外,SUBSTRING
函数还有一个额外的length
参数。length
是一个正整数,用于指定子字符串的字符数。
如果position
和length
的总和大于字符串的字符数,则SUBSTRING
函数将返回一个从位置开始到字符串末尾的子串。
以上是关于mysql和sqlserver中substring(order_date,int,int)的区别的主要内容,如果未能解决你的问题,请参考以下文章