【问题标题】:How to get data based on current day name in a table in sql如何根据sql中表中的当前日期名称获取数据
【发布时间】:2021-04-05 23:42:47
【问题描述】:

这是示例

如何根据我的表中的日期名称获取此数据?

【问题讨论】:

  • 您只能使用动态 SQL 执行此操作。就个人而言,这似乎是你应该修复你的设计。

标签: sql sql-server datetime unpivot lateral-join


【解决方案1】:

你真的应该修正你的设计。每个医生/天元组应存储为单独的,而不是列。

对于您当前的数据结构,我建议先取消透视,然后进行过滤:

select t.doctorname, v.*
from mytable t
cross apply (values 
    ('Sunday', sunday)
    ('Monday', monday)
    ...
) v(dy, val)
where v.dy = datename(weekday, getdate())

【讨论】:

    【解决方案2】:

    正如 Larnu & GMB 所说,您应该考虑修复您的设计。暂时还可以使用Dynamic SQL。

    DECLARE @sqlCommand VARCHAR(max);
    
    SET @sqlCommand = 'SELECT DOCTOR_NAME FROM MY_TABLE 
                       WHERE ' + QUOTENAME(DATENAME(weekday, getdate())) + ' = 1';
    
    EXEC (@sqlCommand)
    

    【讨论】:

      【解决方案3】:
      declare @t table
      (
      Doctor_Name varchar(20),
      Sunday bit, Monday bit, Tuesday bit, Wednesday bit, Thursday bit, Friday bit, Saturday bit
      );
      
      insert into @t values
      ('dr.Sunday', 1, 0, 0, 0, 0, 0, 0),
      ('dr.Monday', 0, 1, 0, 0, 0, 0, 0),
      ('dr.Tuesday', 0, 0, 1, 0, 0, 0, 0),
      ('dr.Friday', 0, 0, 0, 0, 0, 1, 0), 
      ('dr.Tuesday&Saturday', 0, 0, 1, 0, 0, 0, 1);
      
      select *
      from @t
      where choose(datepart(weekday, dateadd(day, @@datefirst, getdate())), Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday) = 1;
      

      【讨论】:

        【解决方案4】:

        以下查询将帮助您获得结果:

        DECLARE @SqlQuery varchar(8000) 
        DECLARE @DateVal DATE = GETDATE(), @DayName varchar(20)
        SET @DayName = DATENAME(WEEKDAY, @DateVal);
        SET @SqlQuery ='SELECT DOCTORNAME FROM TABLE_NAME WHERE '+ @DayName +'= 1'
        EXEC(@SqlQuery)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多