什么时候应该使用CAST和CONVERT的一般指导是什么?选择其中一种与另一种是否存在性能问题?是否更接近于ANSI-SQL?
当前回答
CAST是标准SQL,而CONVERT仅用于方言T-SQL。在datetime的情况下,我们有一个转换的小优势。
使用CAST,您可以指定表达式和目标类型;对于CONVERT,有第三个参数表示转换的样式,它在某些转换中是受支持的,比如字符串和日期和时间值之间的转换。例如,CONVERT(DATE, '1/2/2012', 101)使用表示美国标准的样式101将文字字符串转换为DATE。
其他回答
您也不应该使用CAST来获取哈希算法的文本。CAST(HASHBYTES('…')AS VARCHAR(32))与CONVERT(VARCHAR(32), HASHBYTES('…'),2)不同。如果没有最后一个参数,结果将是相同的,但不是一个可读的文本。据我所知,你不能在CAST中指定最后一个参数。
Convert有一个用于日期到字符串转换的样式参数。
http://msdn.microsoft.com/en-us/library/ms187928.aspx
CAST采用ANSI标准。在可移植性的情况下,这将在其他平台上工作。CONVERT是sql server专用的。但是功能非常强。您可以为日期指定不同的样式
为了扩展上面Shakti复制的答案,我实际上已经能够测量两个函数之间的性能差异。
我正在测试这个问题的各种解决方案的性能,发现使用CAST时,标准偏差和最大运行时间更大。
*时间以毫秒为单位,根据DateTime类型的精度舍入到最接近1/300秒
可读性似乎还没有人注意到。拥有……
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
可能比……更容易理解。
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- MySQL数据库表中的最大记录数
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- HyperLogLog算法是如何工作的?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N