【问题标题】:Validate and compare datetime before inserting在插入之前验证和比较日期时间
【发布时间】:2021-06-12 05:20:10
【问题描述】:

我有以下场景,我想在 4 小时内只存储一次回拨的客户电话号码,如果客户在 4 小时内一次又一次地要求回拨,那么系统将检查是否有已在数据库中创建请求,如果是则不创建请求,否则创建回调。

请注意,我使用的是“2021-03-14 23:50:34.263”格式的datetime

我使用了以下方法,但它只是验证 mobileNo:

INSERT INTO AppointmentsList(mobileNo)
SELECT 'mobileNo'
WHERE NOT EXISTS (
    SELECT mobileNo
    FROM AppointmentsList
    WHERE mobileNo = 'mobileNo'
)

任何见解将不胜感激。

【问题讨论】:

  • 请提供样本数据、所需结果和适当的数据库标签。插入无效数据的有效数据示例会有所帮助。
  • Why should I "tag my RDBMS"? - 请添加标签以指定您使用的是 mysqlpostgresqlsql-serveroracle 还是 db2 - 或其他完全不同的东西。跨度>
  • 你的SQL不是在比较日期吗?而'mobileNo' 字面意思是字符串'mobileNo' - 它不是我认为在某个变量中的 手机号码。
  • datetime 值是二进制值。您所说的“格式”是演示格式。此外,您的查询似乎没有与 datetime 列进行任何比较。
  • 有一个 datetime 列,每当插入 mobileNo 时都会自动生成,我想比较 mobileNo 是否已经存在,如果是,请检查 datetime 列是否距离当前时间超过 4 小时插入否则拒绝请求。

标签: sql sql-server sql-server-2012


【解决方案1】:

我认为 MERGE 语句适合这里

您可能需要使用日期格式,但我会尽量让这个想法清晰

merge into AppointmentsList al
using(select '+123456' mobileNo, '20210314 10:00:00 AM' some_date) new_data
   on al.mobileNo = new_data.mobileNo 
  and datediff(hour, new_data.some_date, al.some_date) < 4
when not matched then insert(mobileNo, some_date) 
                      values(new_data.mobileNo, new_data.some_date);

只需在“new_data”子查询中传递新的电话号码和数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2015-07-20
    • 2013-04-05
    • 1970-01-01
    相关资源
    最近更新 更多