sql-server - 将 CAST、CONCAT 和 COLLATE 与 LEFT OUTER JOIN 结合使用
问题描述
我正在尝试 CONCAT 两列并且还使用 CAST 和 COLLATE 但是当我尝试以我认为可行的方式修复它们时不断收到许多不同的错误。
基本上我试图将两列连接在一起,但我遇到了排序规则冲突。然后,我尝试整理这两列,然后我得到一个数据类型对 COLLATE 错误无效。在此之后,我尝试 CAST 列给我将其更改为 varchar 的错误,但它不起作用。我只是不确定如何使所有 3 个一起工作。
SELECT TransactionHeader.TransactionType,
TransactionHeader.TicketStub,
CAST ( TransactionHeader.TransactionNumber AS nvarchar(8)) AS [TN],
TransactionHeader.ActualAmount,
Currencies.SwiftCode,
TransactionHeader.CurrencyID,
Divisions.ShortName,
DealHeader.StartDateNumber,
DealHeader.EndDateNumber,
CONCAT (TransactionHeader.TicketStub,
TransactionHeader.TransactionNumber) AS [DealRef]
FROM Company.dbo.TransactionHeader TransactionHeader
LEFT OUTER JOIN Company.dbo.DealHeader DealHeader
ON TransactionHeader.THDealID=DealHeader.DHDealID
LEFT OUTER JOIN Company.dbo.Currencies Currencies
ON TransactionHeader.CurrencyID=Currencies.CRRecordID
LEFT OUTER JOIN Company.dbo.Divisions Divisions
ON TransactionHeader.PrimaryPartyID=Divisions.DVRecordID
WHERE TransactionHeader.TicketStub COLLATE DATABASE_DEFAULT
= TransactionHeader.TransactionNumber COLLATE DATABASE_DEFAULT
总而言之,我只想连接 TicketStub 和 TransactionNumber 列,但我不确定如何克服我遇到的错误。就整理而言,我仍然有点不确定它是如何工作的,我只知道要修复我需要做的整理错误。我对 T-SQL 非常陌生,并且在过去的一个半月里才开始编写它,所以请,任何建议都会非常有帮助。谢谢!
解决方案
排序规则是一种设置,用于确定数据库应如何在服务器、数据库或列级别处理字符数据。在red-gate 上有一个非常好的博客。. 每个服务器和数据库都有一个排序规则。数据库和服务器匹配是很常见的,因为默认情况下,数据库将从数据库继承此设置model
。看到列级排序规则并不常见,但这似乎就是您在这里所拥有的,因为您的所有表都来自同一个DATABASE
。
您将需要弄清楚这些列上的排序规则。Dave Pinal在他的博客上对此进行了很好的阐述。您也可以通过其他几种方式做到这一点。请参阅文档。
整理好之后,就可以整理CONCAT
. 它看起来像下面这样。在这里,我只使用DATABASE_DEFUALT
which 可能适用于您的情况:
CONCAT(TransactionHeader.TicketStub COLLATE DATABASE_DEFAULT,TransactionHeader.TransactionNumber COLLATE DATABASE_DEFAULT) AS [DealRef]
COLLATE WITH CONCAT
您可以在此答案和此答案中找到更多示例
推荐阅读
- javascript - Reactjs:TypeError:无法读取未定义的属性“eventSlots”
- pygtk - 将大文件加载到 GtkSourceView 很慢
- c++ - C++:如何根据地形高度更新玩家高度?
- c# - Windows 窗体应用程序 - C# 获取用户输入
- java - Spring Boot:在 Runnable 静态线程中访问 Autowired 组件
- python - 在 Python 模块中使用 InstaLoader
- javascript - 如何在 svelte 中向窗口事件/鼠标滚轮添加参数
- java - 如何格式化打印整数,以便小数点左侧的所有位都对齐?
- javascript - highcharts 饼图为每个部分应用一个模态
- html - 试图找到一种方法在 CSS 中的 div 类中居中多个元素