【问题标题】:update field of table更新表的字段
【发布时间】:2014-03-18 14:55:03
【问题描述】:

我在用户数据库中有字段名称生日 一些用户的生日喜欢 =

2014/02/18

还有一些像 =

2014-02-18

我应该使用生日 varchar (10)

所以我想将 2014/02/18 更改为 2014-02-18

SELECT `birthdate` 
FROM `users` 
WHERE `birthdate` LIKE  '%%%%/%%/%%' REPLACE '%%%%-%%-%%'

此代码仅选择 2014/02/18 的用户

如何在 sql 选项卡中将其替换为 2014-02-18?

【问题讨论】:

  • 为什么将日期存储为字符串?您应该将它们存储为日期/日期时间字段。
  • 感谢您的帮助,但我应该使用 varchar(10),因为我的日期是回历 shamsi en.wikipedia.org/wiki/Hijri_year

标签: mysql sql replace phpmyadmin


【解决方案1】:

如果要更改数据,则需要更新语句:

update users
    set birthdate = replace(birthdate, '/', '-')
    where birthdate like '%/%/%';

但是,您应该学会将日期存储为日期而不是字符串。

【讨论】:

【解决方案2】:

使用替换功能

replace(birthdate,'/','-')

【讨论】:

    【解决方案3】:

    如果您只想将/ 替换为-,您可以这样进行比较:

    SELECT `birthdate` 
    FROM `users` 
    WHERE replace( `birthdate`, '/', '-' ) LIKE  '2014-02-18'
    

    否则,请从日期字段值中同时删除 /- 并比较 YYYYMMDD 格式化值。

    SELECT `birthdate` 
    FROM `users` 
    WHERE replace( replace( `birthdate`, '/', '' ), '-', '' ) LIKE  '20140218'
    

    【讨论】:

    • 你为什么用LIKE '20140218'代替= '20140218'
    • 嗯,这是完全匹配的,我知道。这只是一个示例,可以使用通配符修改输入值以进行搜索。
    • 毕竟因为日期变成了永远不会用作索引的字符串,并且需要一个 tmp 表副本来进行订单/搜索 - 结果将是相同的。
    • 是的。当在 where 子句中的日期上应用字符串函数时,如果没有定义任何定义,则它是一个开销和日期索引。最好始终定义特定于日期的数据类型来存储日期和时间值。
    • 感谢您的帮助,但我应该使用 varchar(10),因为我的日期在回历 shamsi en.wikipedia.org/wiki/Hijri_year
    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2021-11-11
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多