我正在嘗試在加載到 PowerBI 之前清理我的資料以創建視覺效果。我已將查詢創建為:
CREATE VIEW Project2 AS (
Select
p.playerID as ID1,
p.birthYear,
p.birthMonth,
p.birthDay,
p.birthCity,
p.deathYear,
p.nameFirst,
p.nameLast,
p.nameGiven,
p.weight,
p.bats,
p.throws,
p.finalGame,
b.*
from dbo.People as p
LEFT JOIN dbo.Batting as b
ON p.playerID=b.playerID
and b.G >= 50
WHERE (p.finalGame is null or p.finalGame >= 2018));
這很好用,直到嘗試將視圖加載到 PowerBI 中我收到此錯誤:
DataSource.Error:Microsoft SQL:將 varchar 值“2015-08-23”轉換為資料型別 int 時轉換失敗。詳細資訊:
DataSourceKind=SQL
DataSourcePath=laptop-o4rhi9q7;Baseball
Message=將 varchar 值“2015-08-23”轉換為資料型別 int 時轉換失敗。
錯誤代碼=-2146232060
編號=245
類別=16
我不知道在哪里/如何以cast(p.finalGame as date)正確的語法使用,有什么想法嗎?
uj5u.com熱心網友回復:
您必須為此使用正確的日期文字,這意味著它必須用引號引起來,并且最好使用明確的格式
WHERE (p.finalGame is null or p.finalGame >= '20180101'));
如果finalGame是實際varchar,您需要使用適當的轉換型別對其進行轉換。例如
WHERE (p.finalGame is null or CONVERT(date, p.finalGame, 102) >= '20180101'));
這可能不是正確的格式編號,完整串列在這里。
我敦促您首先將列型別更改為date。
uj5u.com熱心網友回復:
根據錯誤訊息,您的日期似乎是“yyyy-mm-dd”形式的字串,而不是真正的日期型別或整數年份。我相信您的解決方法是參考您的年份。任何一個
WHERE (p.finalGame is null or p.finalGame >= '2018');
要么
WHERE (p.finalGame is null or p.finalGame >= '2018-01-01');
如果您的年份是一個變數,請將其轉換為類似CONVERT(VARCHAR(10), @Year). (這假定一個 4 位數的值。)
如前所述,更好的方法(如果您有能力更改架構)是將 finalGame 重新定義為真正的 DATE 或 DATETIME 型別。然后你可以比較p.finalGame >= '2018-01-01'或p.finalGame >= DATEFROMPARTS(@Year, 1, 1)。
uj5u.com熱心網友回復:
如果 p.finalGame = '2015-08-23' 的資料,您需要在 WHERE 子句中將其轉換為日期。
CREATE VIEW Project2 AS (
Select
p.playerID as ID1,
p.birthYear,
p.birthMonth,
p.birthDay,
p.birthCity,
p.deathYear,
p.nameFirst,
p.nameLast,
p.nameGiven,
p.weight,
p.bats,
p.throws,
p.finalGame,
b.*
from dbo.People as p
LEFT JOIN dbo.Batting as b
ON p.playerID=b.playerID
and b.G >= 50
WHERE (p.finalGame is null or cast(p.finalGame as DATE) >= 2018));
uj5u.com熱心網友回復:
根據下面的評論,不推薦這種方法。出于性能原因,將列包裝在函式中并不是一個好主意。
如果 p.finalGame 已經是 DATE 或 DATETIME 型別,則需要提取年份部分進行比較。
WHERE (p.finalGame is null or YEAR(p.finalGame) >= 2018);
如果 p.finalGame 是字符型別,您需要參考您的年份值以進行字串比較(不推薦)或在提取年份進行比較之前將您的字串日期轉換為適當的日期
WHERE (p.finalGame is null or YEAR(CONVERT(DATE,p.finalGame)) >= 2018);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432832.html
