To_Char 和 T_Number 在 SQL Server 中交替用于格式化

Posted

技术标签:

【中文标题】To_Char 和 T_Number 在 SQL Server 中交替用于格式化【英文标题】:To_Char and T_Number alternate in SQL Server for formatting 【发布时间】:2014-03-18 12:22:59 【问题描述】:

什么是 SQL Server 的替代

To_CHAR([Column_Name], -987654321)

To_Number([Column_Name],'999999999D99999900')

? 还, 我可以从语法中预测的是它们都被用于格式化。那么它们有什么区别呢?

【问题讨论】:

【参考方案1】:

Casting 在 Sql Server 中是这样完成的:

CAST([column] AS CHAR([required length]))
CAST([column] AS [whatever numeric type you want])

之后您可以使用FORMAT 函数如果您使用的是 Sql Server 2012 或更高版本。

FORMAT([value], [format])

在你的情况下,我会试试这个:

FORMAT(CAST([column] AS CHAR([required length])), '-987654321')
FORMAT(CAST([column] AS [whatever numeric type you want]), '000000000.000000##')

虽然我不太明白你在这里的格式化策略是什么,尤其是对于你的CHAR 铸造... :)

在 Sql Server 2012 之前,格式化值是尴尬的,充其量是。好消息是,如果您了解一些 C#,您可以将强大的 .NET Framework 格式化机制公开为映射到 assembly running on SQLCLR 的 Sql User Defined Function。从那里你可以很容易地制作一个等效的 SQL2012 FORMAT 函数。这适用于 Sql Server 2005 和 2008。

【讨论】:

我认为我不能在 SQL Server 中使用 CAST([Column] AS Char(-987654321))。 @Zerotoinfinite 确实你不能。 SQL Server 中的强制转换和格式化没有结合在一起。

以上是关于To_Char 和 T_Number 在 SQL Server 中交替用于格式化的主要内容,如果未能解决你的问题,请参考以下文章

如果 TO_CHAR(SYSDATE,'DD')='01' 在 SQL 中截断整个表

在 PL/SQL 中不使用 TO_CHAR 将整数连接到字符串

oracle sql TO_CHAR 函数在某些情况下添加尾随空白

pl/sql的to_char和to_date

(012)每日SQL学习:TO_CHAR(DATE,FORMAT)

sql TO_CHAR