sql-server - 如何包含 ToUpper() INSIDE 查询条件?
问题描述
我有这个查询,它应该在表中获得 active=TRUE 的所有结果,但我想确保如果用户让说更改表中的活动值以说“True”或“tRue”,查询将其识别为预期TRUE,通过某种方式一直在查询条件上应用大写
$Table = Query "SELECT * from [dbo].[$cubeTable] WHERE [active] = 'TRUE'.ToUpper()"
write-host $Table += $row.Item("active")
请注意,这就是我所拥有的,但当然,它会引发错误
WHERE [active] = 'TRUE'.ToUpper()"
使用“1”个参数调用“填充”的异常:“无法在 varchar 上调用方法。”
解决方案
默认排序规则将默认提供您需要的功能(不区分大小写匹配),但是如果您想在排序规则区分大小写的情况下强制进行不敏感匹配,那么您可以使用UPPER
函数,但请注意这将导致对您的表进行全面扫描(因此可能会产生一些主要的性能影响)。
要检查您当前的排序规则:
SELECT DATABASEPROPERTYEX('DbName', 'Collation') SQLCollation;
这将为您提供排序规则,例如Latin1_General_CI_AS
这里的CI
意思Case Insensitive
如果你有这个,那么你很高兴。如果没有,你可以这样做:
SELECT * from [dbo].[$cubeTable] WHERE UPPER([active]) = 'TRUE'
但这会扫描你的整个桌子。
如果您有能力更改架构,则可以根据需要强制对列进行排序:
CREATE TABLE [#CollationTest]
(
[MyColumnName] VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
)
INSERT INTO [#CollationTest] ([MyColumnName]) VALUES ('Value123')
INSERT INTO [#CollationTest] ([MyColumnName]) VALUES ('value123')
SELECT * FROM [#CollationTest] WHERE [MyColumnName] = 'value123' -- Returns 2 rows
DROP TABLE [#CollationTest]
推荐阅读
- css - 如何结合渐变以在相反的轴上工作?
- arrays - 为什么底部 for 循环不包含最后一个元素?
- c - 如何从 EC_KEY 获取发布密钥以使用 ECDSA_do_verify 函数验证摘要?
- android - Android SharedPreference 值在应用关闭时被清除
- google-apps-script - How to request user permission to read a file in GAS?
- c# - Visual C# When are Close() and Dispose() Needed?
- powershell - PowerShell - PSObject 属性成为集合,并将下一个属性的名称附加到集合中
- php - how connect cloud PHP application with process-maker bpm
- azure - Azure Terraform APIM azurerm_api_management_api_policy for adding to specific api
- python - pythonanywhere django static files are not collected from application