Ilość dni pomiędzy datami

Odpowiedz Nowy wątek
2015-10-07 23:45
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 :)

Pozostało 580 znaków

2015-10-07 23:55
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.


Pozostało 580 znaków

2015-10-07 23:57
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 ??

Pozostało 580 znaków

2015-10-08 00:01
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.


Pozostało 580 znaków

2015-10-08 00:14
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

pozdrawiam
paweld

Pozostało 580 znaków

2015-10-08 00:15
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.

BTW LoginDate, a nie LoginData - ŁF 2015-10-08 10:35

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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