如何在 SQL 中使用当天作为列名?

发布于 2025-01-11 14:24:17 字数 289 浏览 0 评论 0原文

我在 SQL Server 中有一个表。

所有日期均以列形式存在于表中(星期一、星期二……)。

列的数据类型是位。

在这种情况下,如何检查当前日期在 where 条件下是否正确?

像这样

select *
from Servis
where [FORMAT(GETDATE(),'dddd')] = 1 --Current day

提前致谢!

I have a table in SQL Server.

All days exist as columns in the table (Monday, Tuesday, ...).

The data types of the columns are bit.

In this case, how can I check current day is true in where condition?

Like this

select *
from Servis
where [FORMAT(GETDATE(),'dddd')] = 1 --Current day

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情愿 2025-01-18 14:24:17

您可以在 WHERE 子句中使用 CASE

<前><代码>选择*
来自服务
WHERE CASE DATENAME(工作日, GETDATE())
当“星期一”然后星期一
当“星期二”然后星期二
WHEN“星期三”然后星期三
当“星期四”然后星期四
当“星期五”然后星期五
当“星期六”那么星期六
当“周日”那么周日
结束=1;

db<>fiddle 上的演示此处

You can use a CASE in the WHERE clause.

SELECT *
FROM Servis
WHERE CASE DATENAME(weekday, GETDATE()) 
      WHEN 'Monday' THEN Monday
      WHEN 'Tuesday' THEN Tuesday
      WHEN 'Wednesday' THEN Wednesday
      WHEN 'Thursday' THEN Thursday
      WHEN 'Friday' THEN Friday
      WHEN 'Saturday' THEN Saturday
      WHEN 'Sunday' THEN Sunday
      END = 1;

Demo on db<>fiddle here

黒涩兲箜 2025-01-18 14:24:17

正如 Larnu 提到的,应该改变设计以便于查询。但是当你坚持保留这个结构时;这是示例:

-- Assuming This is the structure of table
Create Table Servis (
    Saturday bit Default (0), 
    Sunday bit Default (0), 
    Monday bit Default (0), 
    Tuesday bit Default (0), 
    Wednesday bit Default (0), 
    Thursday bit Default (0), 
    Friday bit Default (0)
)
GO

INSERT Servis DEFAULT VALUES
GO

Declare @ColumnName sysname= FORMAT(GETDATE(),'dddd')

DECLARE @Result INT
DECLARE @Params nVARCHAR(4000) = N'@Result INT OUTPUT'
Declare @Query nVarchar(4000) = REPLACE(N'Set @Result = (SELECT @ColumnName FROM Servis)', N'@ColumnName', @ColumnName)

EXEC sp_executesql @stmt = @Query, @params = @Params, @Result = @Result OUTPUT

PRINT @Result

As Larnu mentioned the design should be changed in order to ease of query. But when you insist to keep this structure; here is the sample:

-- Assuming This is the structure of table
Create Table Servis (
    Saturday bit Default (0), 
    Sunday bit Default (0), 
    Monday bit Default (0), 
    Tuesday bit Default (0), 
    Wednesday bit Default (0), 
    Thursday bit Default (0), 
    Friday bit Default (0)
)
GO

INSERT Servis DEFAULT VALUES
GO

Declare @ColumnName sysname= FORMAT(GETDATE(),'dddd')

DECLARE @Result INT
DECLARE @Params nVARCHAR(4000) = N'@Result INT OUTPUT'
Declare @Query nVarchar(4000) = REPLACE(N'Set @Result = (SELECT @ColumnName FROM Servis)', N'@ColumnName', @ColumnName)

EXEC sp_executesql @stmt = @Query, @params = @Params, @Result = @Result OUTPUT

PRINT @Result
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文