TSQL尝试清理并将杂乱的字符串字段转换为十进制以执行SUM函数

Chr*_*rie 3 sql t-sql sql-server casting

我想写一些SQL来实现以下目标.

"向我展示每日结果,详细说明报价数量及其相关票价的总和,其中票价不为空,QuoteOrBooking等于'报价'".

所以,鉴于下表,我正在寻找以下结果:

Date        Quotes  TotalValue
2013-08-06  3       228.00
2013-08-07  2       80.00
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,Fare是一个(相当混乱的)字符串字段,所以我需要清理它并转换为小数.这是我坚持的一点.下面的例子显示了问题的严重程度(例如,如果我能让它为这些数据工作,它将适用于整个数据库).

我想我搞乱了REPLACE的使用,我不确定在尝试将字符串转换为小数时是否存在句点(.)是否可接受.

+-------------+------------+----------------+
| BookingDate | Fare       | QuoteOrBooking |
+-------------+------------+----------------+
| 2013-08-06  | NULL       | Quote          |
| 2013-08-06  | 21         | Booking        |
| 2013-08-06  | 97         | Quote          |
| 2013-08-06  | £131       | Quote          |
| 2013-08-07  | 21.00      | Quote          |
| 2013-08-07  | 59.        | Quote          |
| 2013-08-07  | NULL       | Quote          |
| 2013-08-07  | 97         | Booking        |
+-------------+------------+----------------+
Run Code Online (Sandbox Code Playgroud)

非常感激任何的帮助.

非常感谢,

克里斯.

Har*_* CO 6

看起来MONEY对我来说都是:

SELECT CAST(Fare AS MONEY)
FROM Table1
Run Code Online (Sandbox Code Playgroud)

演示:SQL小提琴

完整查询:

SELECT  BookingDate
       ,COUNT(*)
       ,SUM(CAST(Fare AS MONEY))
FROM Table1
WHERE QuoteOrBooking = 'Quote' 
     AND Fare IS NOT NULL
GROUP BY BookingDate
ORDER BY BookingDate
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT  BookingDate
       ,COUNT(Fare)
       ,SUM(CAST(Fare AS MONEY))
FROM Table1
WHERE QuoteOrBooking = 'Quote' 
GROUP BY BookingDate
ORDER BY BookingDate
Run Code Online (Sandbox Code Playgroud)