SQL: формула столбца - PullRequest
       1

SQL: формула столбца

0 голосов
/ 29 апреля 2011

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

Parking_Cost это поле для расчета стоимости на основе difference between ParkingStartTime and ParkingEndTime * 5, начиная с 1 hours = $5.00.

Формула:

(CONVERT([int],[ParkingEndTime]-[ParkingStartTime]*5,(0)))

Буду очень признателен за любое предложение?

С уважением.

1 Ответ

1 голос
/ 29 апреля 2011

Используйте DATEDIFF, чтобы определить разницу между датами / временем. Ваша формула может выглядеть примерно так:

DATEDIFF(minute, ParkingStartTime, ParkingEndTime) / 60 * 5

Конечно, вы можете использовать только

DATEDIFF(hour, ParkingStartTime, ParkingEndTime) * 5

, что проще, но в некоторых случаях может привести к нежелательным результатам. Например, если время начала было 8:55, а время окончания 9:05, DATEDIFF(hour, ...) вернуло бы 1, хотя фактическая разница намного меньше, всего 10 минут. Это потому, что DATEDIFF по сути усекает время до указанных единиц, а затем вычисляет разницу.

Так что похожая ситуация может быть с минутами, но, по крайней мере, с минутами у вас будет лучшая детализация. Например, вы получите ответ 60 при расчете DATEDIFF(minute, '5:20:57', '6:20:04'), хотя на самом деле он немного больше 59 минут, но неточность не так велика, как в DATEDIFF(hour, ...).

Если вы хотите добиться еще большей детализации, рассчитайте разницу в секундах и разделите на 3600, чтобы получить целые часы:

DATEDIFF(second, ParkingStartTime, ParkingEndTime) / 3600 * 5

UPDATE

В SQL Server, когда целое число делится на целое, результат также будет целым числом.

Если вам нужен более точный результат, вы можете убедиться в этом следующим образом (используя последнее выражение выше):

DATEDIFF(second, ParkingStartTime, ParkingEndTime) / 3600.0 * 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...