def read_large_file(file_handler, block_size=10000):
block = []
for line in file_handler
block.append(line)
if len(block) == block_size:
yield block
block = []
# don't forget to yield the last block
if block:
yield block
with open(path) as file_handler:
for block in read_large_file(file_handler):
print(block)
此查询返回当前月份的第一个星期一。我只是想知道这个查询是如何工作的,如何获得本月的第一个星期三。
答案 0 :(得分:2)
让我们简化一下:
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(DAY, 6 - DATEPART(DAY, GETDATE()), GETDATE())), 0)
你可以这样思考:
-- number of day to go back to reach 1st week of month
z = 6 - DATEPART(DAY, GETDATE())
-- a day in 1st week of the month
y = DATEADD(DAY, z, GETDATE())
-- number of weeks between 0 (1900-01-01) and 1st week of month
x = DATEDIFF(WEEK, 0, y)
-- add the number of weeks elapsed to 1900-01-01 to get the datetime of 1st day of 1st week of month
SELECT DATEADD(WEEK, x, 0)
答案 1 :(得分:1)
我只是想知道这个查询是如何工作的
SELECT DATENAME(WEEKDAY, '1900-01-01') --'Monday'
SELECT DATENAME(WEEKDAY, 0) --also 'Monday'
1900年1月1日是星期一。当您在星期一添加一周时,您将获得另一个星期一。如果你在星期一增加6,170周 - 你仍然会得到星期一。截至08/10/2018,自1900年1月1日起已有6,170周。
简单地说,查询计算这些周,自1900年1月1日星期一起增加了6,170周。
如何获得当月的第一个星期三呢?
SELECT DATENAME(WEEKDAY, '1900-01-03') --Wednesday
SELECT DATENAME(WEEKDAY, 2) --also Wednesday
1900年1月3日由整数2表示。我们将0(星期一)更改为2(星期三)。如果你在星期三增加6,170周你还会得到一个星期三。
在查询中有一个0.我们可以将其更改为2:
SELECT
DATEADD(WEEK, DATEDIFF(WEEK, 0,DATEADD(DAY, 6 - DATEPART(DAY, GETDATE()),
GETDATE())), 2),'First Wednesday of Current Month'
编辑:我可以通过删除整数并输入实际日期来使这个更清晰:
SELECT
DATEADD(WEEK, DATEDIFF(WEEK, 0,DATEADD(DAY, 6 - DATEPART(DAY, GETDATE()),
GETDATE())), '1900-01-03'),'First Wednesday of Current Month'
答案 2 :(得分:0)
根据您的评论中的要求,这将为您提供本月的第一个星期三:
SELECT
DATEADD(WEEK, DATEDIFF(WEEK, 0,DATEADD(DAY, 6 - DATEPART(DAY, GETDATE()), GETDATE())), 2)
AS 'First Wednesday of Current Month'
我将DATEADD函数中的最后一个0更改为2,因为这是一周的基于零的表示,0表示星期一。
您可以使用W3schools上的“自己尝试”功能来查看查询并找出它们:W3schools。只需将您的查询粘贴到控制台中即可。