2014-10-10 2 views
0

Я новичок в написании SQL запросов и имею вопрос с временной датой колонке tblVehicleDepreciationLine.LineDate, который определен в SQL Smalldatetime Все мне нужно, это tblVehicleDepreciationLine.LineDate между началом месяца и конец месяца .. Я прочитал 20 различных решений по времени и времени, но не могу понять, какой код мне нужен, чтобы получить мой результат.SQL DateTime с в месяц

Любая помощь будет очень признательна.

Select 
    tblVehicle.Rego, 
    tblVehicle.CompliancePlate, 
    tblVehicleType.Description, 
    tblVehicleEquipmentStatus.Description As Description1, 
    tblBranch.Name, 
    tblVehicleDepreciationLine.WDV, 
    tblVehicle.ID, 
    tblVehicleDepreciationLine.LineDate 
From 
    tblVehicle 
    Inner Join tblVehicleType On tblVehicle.VehicleType_ID = tblVehicleType.ID 
    Inner Join tblVehicleEquipmentStatus On tblVehicle.VehicleEquipmentStatus_ID = tblVehicleEquipmentStatus.ID 
    Inner Join tblBranch On tblVehicle.ControllingBranch_ID = tblBranch.ID 
    Inner Join tblVehicleDepreciationLine On tblVehicleDepreciationLine.Vehicle_ID = tblVehicle.ID 
Where 
    (tblVehicleDepreciationLine.LineDate >= 
     ('(year(getdate()), month(getdate()), 1)') And 
     tblVehicle.VehicleEquipmentStatus_ID = 1) 
Or 
    (tblVehicleDepreciationLine.LineDate < 
     ('(year(getdate()), month(getdate())+1, 1)') And 
     tblVehicle.VehicleEquipmentStatus_ID = 2) 
Order By 
    tblVehicle.ControllingBranch_ID 
+1

В какой базе данных вы используете и какую версию? – jpw

ответ

2

Предполагая, что SQL Server. Если вы хотите проверить, если дата, если между первым и последним в месяц, что вы на самом деле проверить, является ли он в том же году и месяц:

(
year(tblVehicleDepreciationLine.LineDate) = year(getdate()) 
and 
month(getdate()) = month(tblVehicleDepreciationLine.LineDate 
) 

или в SQL Server 2012, если вы хотите использовать между:

(
tblVehicleDepreciationLine.LineDate between 
datefromparts(year(getdate()), month(getdate()), 1) and eomonth(getdate()) 
) 

Это может быть не самый эффективный способ сделать это, но это должно дать вам идею.

0

Если вы хотите проверить, соответствует ли дата в том же году и месяце, вы можете использовать что-то вроде WHERE tblVehicleDepreciationLine.LineDate LIKE ('2012-10%') (возможно, вам придется модифицировать это, чтобы адаптироваться к тому, как ваш сервер преобразует даты в строки в зависимости от локального сервера вашего сервера)

0
--Below dates will give some idea for you 
SELECT 
'Start of Current Month' = DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0), 
'End of Current Month'  = DATEADD(ms,-10,DATEADD(m, DATEDIFF(m,0,GETDATE())+1,0)), 
'Start of Next Month'  = DATEADD(m, DATEDIFF(m, 0, GETDATE())+1, 0) 


--Your WHERE clause would looks like below 
WHERE 
    (
     tblVehicleDepreciationLine.LineDate >= DATEADD(m, DATEDIFF(m, 0, GETDATE()), 0) 
     AND tblVehicle.VehicleEquipmentStatus_ID = 1 
    ) 
    OR 
    (
     tblVehicleDepreciationLine.LineDate < DATEADD(m, DATEDIFF(m, 0, GETDATE())+1, 0) 
     AND tblVehicle.VehicleEquipmentStatus_ID = 2 
    ) 
Смежные вопросы