たとえば、列が[id] int
、[name] varchar
、[bookyear] datetime
であるテーブルタブで、一致する年に基づいて複数のレコードを選択したい
2009年のレコードをすべて選択したい。
次のクエリは0の結果を返します。
SELECT [ACCNO]
,[Roll No]
,[IssueDate]
,[DueDate]
FROM [test1].[dbo].[IssueHis$]
where [IssueDate] between 12-12-2004 and 1-01-2010
select id,name,bookyear from tab1 where year(bookyear) = 2009
SELECT [ACCNO]
,[Roll No]
,[IssueDate]
,[DueDate]
FROM [test1].[dbo].[IssueHis$]
WHERE [IssueDate] >= '20090101' AND
[IssueDate] < '20100101'
yyyymmdd
パターンを使用します(yyyy-mm-dd
ではなく、一般的に安全ではありません)したがって、「2004年12月12日」と「2009年12月31日」の間の値を見つけるには包括的、時間を考慮して:
...
where [IssueDate] >= '20041212' AND [IssueDate] < '20100101'
「year = 2009」の質問があいまいなため、編集またはこれ
...
where [IssueDate] >= '20090101' AND [IssueDate] < '20100101'
IssueYearを別の列として持つビューを作成できます
CREATE VIEW vIssueHis
AS
SELECT
[ACCNO],
[Roll No],
[IssueDate],
[DueDate],
DATEPART(yyyy,IssueDate) as IssueYear,
DATEPART(yyyy,DueDate) as DueYear
FROM [test1].[dbo].[IssueHis$]
次に、このようにビューをクエリできます
SELECT [ACCNO]
,[Roll No]
,[IssueDate]
,[DueDate]
FROM vIssueHis
WHERE IssueYear = 2009
SQL Serverと日付に関して覚えておくべき最も重要なことの1つは、使用するのに最適な形式は次のとおりです。'YYYYMMDD'
(または'YYYYMMDD HH:MI:SS'
)。この形式は、地域の日付設定に関係なく、SQLServerによって常に適切に解釈されます。
SELECT [ACCNO]
,[Roll No]
,[IssueDate]
,[DueDate]
FROM [test1].[dbo].[IssueHis$]
WHERE [IssueDate] >= '20090101'
AND [IssueDate] < '20100101'
できるよ
....
WHERE [IssueDate] > '2004' AND [IssueDate] < 2010
where YEAR(IssueDate) = '2009'