在SQL Server中将日期和时间连接为DATETIME

时间:2018-08-08 02:25:58

标签: sql sql-server

在将日期和时间组合到DATETIME时遇到麻烦。我已有一个包含数据的表,因此无法将其更改为Datetime2

DECLARE @t1 TABLE(StartDate DATE, StartTime Time)

INSERT INTO @t1 
VALUES('2018-02-28','08:00:00')

SELECT 
    CAST(CONCAT(StartDate, ' ', StartTime) AS DATETIME) 
FROM @t1

显示的错误是:

  

从字符串转换日期和/或时间时转换失败。

2 个答案:

答案 0 :(得分:2)

强制转换失败,因为datetime数据类型的时间成分比time数据类型的精度低,如this page所述,它是各种日期的有用参考和SQL Server提供的时间类型。您也可以在该页面上看到,SQL Server具有datetime2数据类型,可以提供更高的精度。如果您在cast中使用过该功能,我认为您不会遇到问题。

戈登的解决方案是一个很好的解决方案,因为它一开始就无需处理字符串的转换。请注意,将datetime组合成datetime可能会导致精度下降。有关使用datetime2保留原始值精度的解决方案,请参见Stack Exchange DBA网站上的this question

答案 1 :(得分:0)

不要 function findMatches(wordToMatch, movies) { return movies.filter(film => { console.log(film.Title, wordToMatch); console.log(film.Title.toLowerCase().includes(wordToMatch)); return film.Title.toLowerCase().includes(wordToMatch) || film.Year.toLowerCase().includes(wordToMatch); }); } function displayMatches(movies, value) { const matchArray = findMatches(value.toLowerCase(), movies); const html = matchArray.map(film => { const regex = new RegExp(value, 'gi'); const titleName = film.Title.replace(regex, `<span class="hl">${value}</span>`); const yearName = film.Year.replace(regex, `<span class="hl">${value}</span>`); return ` <li> <span class="name">${titleName}, ${yearName}</span> <span class="population">${film.imdbID}</span> </li> `; }).join(''); suggestions.innerHTML = html; } const searchInput = document.querySelector('.search'); const suggestions = document.querySelector('.suggestions'); searchInput.addEventListener('keyup', () => { const endpoint = 'https://www.omdbapi.com/?apikey=63f88e02&s=' + searchInput.value; fetch(endpoint) .then(blob => blob.json()) .then(data => { console.log('response from API'); console.log(data); if (!data.Error) displayMatches(data.Search, searchInput.value); }); }); 。只需添加,但它们都必须为concat()

datetime