Ilość dni pomiędzy datami

0

Witam,
Mam pewien problem. Otóż próbuje sprawdzić ilość dni pomiędzy dwiema datami, jedna z nich to data bieżąca, natomiast druga to data jakieś czynności zapisana w bazie danych.
Problem jest taki, że dostaje błąd:
Conversion failed when converting date and/or time from character string.

A oto kod:


select
FullName,Serial,PCName2,
(case
when (SELECT DATEDIFF(day,(CONVERT(VARCHAR(10),LoginData,120)),(CONVERT(VARCHAR(10),GETDATE(),120)))) > 31 Then 'Nie aktywny'
when (SELECT DATEDIFF(day,(CONVERT(VARCHAR(10),LoginData,120)),(CONVERT(VARCHAR(10),GETDATE(),120)))) < 31 then ' '
end) "Aktywność"
from sqldb.dbo.Database_db

Gdzie popełniłem błąd (dla pewności dałem nawet GETDATE() taki sam format jaki przypisałem kolumnie LoginData, w obu przypadkach jest to samo :( ).

Z góry wielkie dzięki za pomoc :)

0

1.Baza danych nie służy do tego, aby ustawiać stany na podstawie jej danych, to jest zadaniem backendu.
2.Wrzuć schemat tej bazy.

0
  1. nie bardzo rozumiem. zapytanie i tak będzie zamieszczone na stronie, ale OK ;)
  2. co masz dokładnie na myśli, nazwy kolumn, ich typ, itp ??
0

1.Z bazy danych powinieneś zwracać tylko liczbę tych dni, a ich klasyfikacją powinien zajmować się backend (PHP, Python, Java czy co tam masz).
2.Tak.

0

Datediff podaje różnice pomiędzy datami a nie tekstem - niepotrzebna konwersja na varchar.
Nie potrzebne też jest wykonywanie podzapytania w case

SELECT FullName,Serial,PCName2, CASE WHEN DATEDIFF(DAY, LoginDate, GETDATE()) > 31 THEN 'Nie aktywny' else ' ' END "Aktywność" FROM sqldb.dbo.Database_db
0

Chyba rozwiązałem sobie problem. Nie zauważyłem, że podczas importowania bazy z Excela (poprzez SQL Managment Studio, wersja 2014) program domyślnie przypisał mi typ danych nvarchar(50) do kolumny [LoginData]. Jestem pewien, że jest to wina tego problemu, gdyż mam inną bazę, gdzie podobna kolumna z datą ma datetime i na tej bazie zapytanie działa poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0