SQL Server проблема преобразования?От строки к дате и времени?Проблема в том, что у меня нет строковых полей - PullRequest
0 голосов
/ 24 июня 2019

Я бы хотел выбрать конкретную дату, но mySql говорит, что существует проблема с конвертацией.

Вот моя структура

Table AssAttestati

ID int Allow Nulls (No),
matricola varchar(MAX) Allow Nulls (YES),
attestato int Allow Nulls (YES),
dataS date Allow Nulls (YES),
scadenza date Allow Nulls (YES),
PDF varchar(250) Allow Nulls (YES),
validita int Allow Nulls (YES).
Table Attestati

ID int Allow Nulls (No),
nome varchar(250) Allow Nulls (YES),
descrizione varcha(250) Allow Nulls (YES),
preavvisoScadenza int Allow Nulls (YES),
ente varchar(MAX) Allow Nulls (YES),
validita int Allow Nulls (YES)
Table Dipendenti

ID int Allow Nulls (No),
nome varchar(50) Allow Nulls (YES),
cognome varchar(50) Allow Nulls (YES)
matricola varchar(MAX) Allow Nulls (Yes)
Sql Instruction
SELECT Dipendenti.cognome,
       Dipendenti.nome,
       AssAttestati.dataS,
       AssAttestati.scadenza,
       Dipendenti.matricola,
       AssAttestati.PDF,
       AssAttestati.ID
FROM OliveroS.dbo.Dipendenti
     INNER JOIN OliveroS.dbo.AssAttestati ON Dipendenti.matricola = AssAttestati.matricola
WHERE AssAttestati.attestato = 11
  AND AssAttestati.scadenza >= '24/06/2018'
UNION
SELECT Dipendenti.cognome,
       Dipendenti.nome,
       Dipendenti.matricola,
       AssAttestati.dataS,
       AssAttestati.scadenza,
       AssAttestati.PDF,
       AssAttestati.ID
FROM OliveroS.dbo.Dipendenti
     INNER JOIN OliveroS.dbo.AssAttestati ON Dipendenti.matricola = AssAttestati.matricola
WHERE AssAttestati.attestato = 11
  AND AssAttestati.scadenza IS NULL
ORDER BY Dipendenti.cognome;

Там написано "Ошибка преобразования из String в Date", но у меня нет строковых полей, они однозначно: scadenza (date) и dataS (date)

1 Ответ

3 голосов
/ 24 июня 2019

Столбцы в операторах SELECT в UNION перепутаны.Первый запрос возвращает:

Dipendenti.cognome,
Dipendenti.nome,
AssAttestati.dataS,
AssAttestati.scadenza,
....

В то время как второй возвращает:

Dipendenti.cognome,
Dipendenti.nome,
Dipendenti.matricola,
AssAttestati.dataS,
...

Это означает, что он возвращает поле varchar(max), где ожидалось date.Механизм запросов попытается преобразовать его в date и завершится неудачно с ошибкой преобразования при обнаружении первой неразборчивой строки.

Измените SELECT второго запроса, чтобы он соответствовал первому запросу:

SELECT Dipendenti.cognome,
       Dipendenti.nome,
       AssAttestati.dataS,
       AssAttestati.scadenza,
       Dipendenti.matricola,
       AssAttestati.PDF,
       AssAttestati.ID

В любом случае использование varchar(max) просто для удобства - плохая идея.Эти поля используются для хранения больших двоичных объектов, которые не нужно индексировать и использовать другое хранилище.Объединение этих полей приведет к полному сканированию обеих таблиц

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...