Извлечение чисел c дат из отметки времени (MS Access SQL - 2016) - PullRequest
0 голосов
/ 19 июня 2020

Я пытался преобразовать поле отметки времени (пример значения - 6 января 2020 г., 12:44: 37.655) в числовое c поле даты, чтобы обеспечить сортировку на основе столбца даты.

Я пробовал использовать DateTime и CDate, но продолжаю видеть "#Error" в столбце NewDate, когда запускаю запрос. Какие-нибудь советы?

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вы можете использовать функцию DateValue ().

Таким образом:

select ID, InvoiceAmount, DateValue([InvoiceDTime]) as InvoiceDate
ORDER BY DateValue([InvoiceDTime])
1 голос
/ 20 июня 2020

Access не может распознать эту строку как допустимую дату из-за порядкового номера, запятой и десятичной дроби. Придется использовать функции обработки строк для перенастройки на распознаваемое значение даты / времени.

Если в строке всегда будет «th», запятая и от 1 до 3 десятичных знаков, примите во внимание: CDate(Replace(Replace(Left([field], InStrRev([field], ".") - 1), "th", ""), ",", "")) Или используйте DateValue (), если нужно удалить компонент времени.

Однако я предполагаю, что будут значения без десятичных чисел, а также с разными порядковыми числами, и это выражение не будет выполнено. Далее предполагается, что ЧЧ: ММ: СС всегда будет 8 символов:

SELECT *, Left([Test],InStr([Test]," ")) AS Mo, 
Val(Mid([Test],InStr([Test]," "))) AS Dy, 
Mid([Test],InStrRev([Test],",")-5,5) AS Yr, 
Mid(Test,InStrRev(Test,",")+1,9) AS Tm, 
CDate([Mo] & [Dy] & [Yr] & [Tm]) AS NewDate
FROM Table;

Возможно, будет удобнее вызвать пользовательскую функцию VBA.

Function ConvDate(strDte As String) As Date
Dim Mo As String, Dy As String, Yr As String, Tm As String
Mo = Left(strDte, InStr(strDte, " "))
Dy = Val(Mid(strDte, InStr(strDte, " ")))
Yr = Mid(strDte, InStrRev(strDte, ",") - 5, 5)
Tm = Mid(strDte, InStrRev(strDte, ",") + 1, 9)
ConvDate = CDate(Mo & Dy & Yr & Tm)
End Function

Если вы хотите отбросить время часть, не объединяйте извлеченный компонент и не используйте DateValue () для возвращаемого значения даты / времени.

Согласованность в структуре имеет решающее значение при манипуляциях со строками. Чем больше вариаций, тем сложнее код.

...