【问题标题】:SUBSTR returns no record (mysql)SUBSTR 不返回记录(mysql)
【发布时间】:2014-12-29 07:36:53
【问题描述】:
SELECT jour 
FROM reservations 
WHERE id_user = 57 AND SUBSTR(jour,10) = '2014_08_14' ORDER BY jour 

什么都不返回...

我在数据库中有一条符合条件的记录:

【问题讨论】:

  • jour col 是什么类型的?它是明确的字符串列还是日期、日期时间、时间戳列?
  • 是字符串类型的jour 还是其他类型的?
  • 如果你有这样的问题,只需将你调用的函数(即substr)放在你的选择中,以验证你是否做了你想做的事。

标签: mysql sql select substr


【解决方案1】:

substr 的第一个参数是开始的位置。因此,SUBSTR(jour,10) 返回_AM,你得到一个空的结果集。相反,您应该使用树参数变体:

SELECT   jour
FROM     reservations 
WHERE    id_user = 57 AND 
         SUBSTR(jour, 1, 10) = '2014_08_14' -- Here
ORDER BY jour 

为了使您的查询更具可读性并确保此类错误不再重复,您可以使用以下变体:

SELECT   jour
FROM     reservations 
WHERE    id_user = 57 AND 
         SUBSTR(jour FROM 1 FOR 10) = '2014_08_14' -- Here
ORDER BY jour 

【讨论】:

    【解决方案2】:

    你也可以使用LEFT(str,len)函数或SUBSTR(str,pos,len)

    试试这个:

    SELECT jour 
    FROM reservations 
    WHERE id_user = 57 AND LEFT(jour, 10) = '2014_08_14' 
    ORDER BY jour
    

    SELECT jour 
    FROM reservations 
    WHERE id_user = 57 AND SUBSTR(jour, 1, 10) = '2014_08_14' 
    ORDER BY jour
    

    【讨论】:

      【解决方案3】:

      如果您从预订中选择 SUBSTR(jour,10),您会得到准确的结果:“2014_08_14”吗?我相信你需要做 SUBSTR(jour,1,10)。

      【讨论】:

        【解决方案4】:

        SUBSTR(jour,10) 替换为SUBSTR(jour,1,10)

        假设:jourvarchar 类型的列。如果您将日期存储为 varchar不要这样做!

        解释:我的解决方案使用SUBSTR 函数的(str,pos,len) 重载。参数 2 和 3 分别是起始位置和子字符串的长度。

        Documentation

        【讨论】:

          猜你喜欢
          • 2019-05-26
          • 1970-01-01
          • 2015-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多