Php 我可以给一个中间字符串来从mysql表中获取哪个值的中间有那个字符串吗?

Php 我可以给一个中间字符串来从mysql表中获取哪个值的中间有那个字符串吗?,php,mysql,database,Php,Mysql,Database,例如:- 我已将日期以ddmmyyyy格式保存在表中 现在我需要获取第03个月的行 所以我的问题可以是 Select * from orders where date = "%03%" 但它也将带来日期03和2003年的值 如果03在字符串中位于第3和第4位,是否仍要获取值?要仅通过字符的位置获取值,请使用以下方法: SELECT * FROM `orders` WHERE `date` LIKE "__03____" : _只匹配一个字符 鉴于 %匹配任意数量的字符,甚至零个字符 后者

例如:-

我已将日期以ddmmyyyy格式保存在表中

现在我需要获取第03个月的行

所以我的问题可以是

Select * 
from orders 
where date = "%03%"
但它也将带来日期03和2003年的值


如果03在字符串中位于第3和第4位,是否仍要获取值?

要仅通过字符的位置获取值,请使用以下方法:

SELECT * FROM `orders` WHERE `date` LIKE "__03____"
:

_只匹配一个字符

鉴于

%匹配任意数量的字符,甚至零个字符


后者在您的情况下是无效的,因为您已经遇到了一个问题,即它将匹配字符串中的任何位置。

在MySQL中,%匹配零个或多个字符,而u恰好匹配一个字符。因此,您可能希望与_u03%或_u03_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

此外,必须使用LIKE而不是=来处理通配符,并使用反斜杠转义所述字符的任何文本实例


有关更多信息,请参见

日期以Y-m-d格式存储在MySQL中,如果您已将日期存储为文本,则可以尝试

Select * from orders where month(str_to_date(date,'%d%m%Y')) = 03
 SELECT * FROM `orders` WHERE `date` LIKE "__03____";;

做这件事的方法不止一种。您可以使用:

如其他答案中所示,使用LIKE _u 03___;也应该有效

我最喜欢的选择是

所以你可以:

供参考:


如果您已将日期存储在日期字段类型中,则最好将日期存储为日期类型。这将允许您使用很多类似的月份。使用您的格式,您甚至无法轻松对结果进行排序。哦,谢谢!为了更好地理解,我这里只举了一个例子。那个日期类型对我来说是新的信息。谢谢你。但我的问题仍然是,是否有任何方法可以获取在精确位置有一些中间字符串的字符串?我从下面的答案中得到了我想要的答案。谢谢大家:%03%在这种情况下不起作用,因为它仍然匹配03xxxxxx和XXXXXX 03。谢谢您的即时回答。它帮助了我:非常感谢你!!!我想这对我下一个问题也有帮助。如果可能,也回答这个问题@Karthik您是否已将列转换为日期类型?我在我的答案的末尾加入了一些应该这样做的代码。但我是手工做的。谢谢你这么多顺便说一句!
SELECT * FROM orders WHERE SUBSTRING(`date`, 3, 2) = "03"
SELECT * FROM orders WHERE MONTH(`date`) = 3
ALTER TABLE orders ADD COLUMN order_date DATE;
UPDATE orders SET order_date = str_to_date(`date`,'%d%m%Y');