我有一个非常简单的代码正在尝试运行,但是由于我不明白的原因,它无法正常工作。这是我的代码:
WITH CTE AS
(
SELECT DISTINCT OrderNo
FROM OrderDet
WHERE PartNo LIKE '%.%'
AND OrderNo NOT LIKE '%[a-z]%'
)
SELECT *
FROM CTE
WHERE CAST(CTE.OrderNo AS INT) >= 21187
运行此代码将引发以下错误:
将varchar值'20361E'转换为数据类型int时转换失败。
现在我知道有OrderNo
个值包含'E',但是就我而言,我正在CTE中将它们过滤掉。如果我自己在CTE中运行该语句,则会得到580条记录,而这些记录中都没有字母。
这是怎么回事?
答案 0 :(得分:7)
如评论中所述,您无法真正控制是否在过滤器之前尝试exports.myFunctionPending =
functions.database.ref('/users/{uid}/profile/isPending')
.onUpdate(async (change, context) => {
const snapshot = change.after;
const val = snapshot.val();
const userid = context.params.uid; //shows userid but is useless
const authVar = context.auth; //says undefined and does nothing
console.log(val);
console.log(userid);
const msg = {
to: 'myemail@mydomain.com',
from: 'noreply@mydomain.com',
// custom templates
templateId: 'd-b7aakjsdgwq7d798wq7d8',
substitutionWrappers: ['{{', '}}'],
//substitutions: {
dynamic_template_data: {
//name: user.displayName
name: 'My Name'
}
};
try {
await sgMail.send(msg);
console.log('This was sucessful');
} catch(error) {
console.error('There was an error while sending the email:', error);
}
return null;
});
;这完全取决于SQL Server选择如何优化查询。
此外,检查是否存在小数并且没有a-z并不是一种非常可靠的过滤非数字的方法。
我认为,以下两种方法都消除了CTE的需要,因为您只是在使用它来尝试强制首先执行过滤器。 CTE可以合并到其余查询中。 perhaps worth a read are some other tidbits about CTEs。
尝试type MyJsonName struct {
User []struct {
Address []struct {
City string `json:"city"`
Country string `json:"country"`
Street string `json:"street"`
Zip string `json:"zip"`
} `json:"address"`
Authenticators []struct {
Name string `json:"name"`
Phone int `json:"phone"`
} `json:"authenticators"`
CdbID string `json:"cdb_id"`
Email string `json:"email"`
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
Phone int `json:"phone"`
Status string `json:"status"`
VoiceSig string `json:"voice_sig"`
VoicesigCreatedTime string `json:"voicesig_created_time"`
} `json:"user"`
}
(其中I wrote about here):
CAST
如果您使用的旧版本不支持TRY_CONVERT()
,则可以尝试WHERE TRY_CONVERT(int, CTE.OrderNo) >= 21187;
(perhaps another useful read):
TRY_CONVERT
但是ISNUMERIC()
is not all that reliable either。
自从我们知道版本以来,您的查询可以简化为:
CASE