【问题标题】:SQL: Is it possible to pass a data_type to a function in a variable? (Function CONVERT)SQL:是否可以将 data_type 传递给变量中的函数? (功能转换)
【发布时间】:2020-03-11 13:59:55
【问题描述】:

我希望调用SQL CONVERT 函数,同时引用一个变量来设置data_type

例如:

CONVERT(nvarchar(10), column1, 120)

但我不想指定nvarchar(10),而是要引用一个变量:

CONVERT(@myDataType, column1, 120)

现在@myDataType 可能是nvarchar(10)nvarchar(7)Int,但我不知道使用什么语法。

或者,我想将大小设置为参数:

CONVERT(nvarchar(@mySize), column1, 120)

大小可以是Int。这似乎也不起作用。

这两种可能吗?

【问题讨论】:

  • 您使用的是哪个 dbms? (您的代码正在使用产品特定的功能。)
  • 不是没有动态 SQL。您想通过使用此功能来完成什么?
  • 这是在 MSSQL 中使用 Microsoft SQL Server Management Studio
  • 我有时会运行这个查询,它多次使用 CONVERT(nvarchar(10), column1, 120)。有时我需要使用 CONVERT(nvarchar(7), column1, 120) 来运行它。我希望设置一个可以在顶部调整的变量,而不是在需要更改时进行查找/替换
  • 更好的问题是为什么将日期时间存储为字符串。计算列(可能超过 1 个)可能是更好的解决方案。

标签: sql sql-server sqldatatypes


【解决方案1】:

不,你不能这样做。参数仅代表文字(即“常量”)值。它们不代表标识符、关键字、运算符和语言的其他组件。

在存储过程中,您可以使用动态 SQL 解决此问题。

但是,SQL Server 不支持(以任何简单合理的方式)函数调用中的动态 SQL。

我建议你直接转换成nvarchar(max),然后使用left()

LEFT(CONVERT(nvarchar(max), column1, 120), @mysize)

实际上,nvarchar(max) 对于约会来说有点矫枉过正。 32255 之类的值应该足够了。

【讨论】:

  • 我喜欢这个主意。我试试看!
【解决方案2】:

假设您的查询基本上是静态的(例如 - 您不会对其进行太多更改),您可以编写一个动态 sql 语句来创建该语句。

SET QUOTED_IDENTIFIER OFF 

DECLARE @mySize INT = 10
DECLARE @q NVARCHAR(MAX)

SET @q="
    SELECT CONVERT(nvarchar("+CONVERT(NVARCHAR(MAX),@mySize)+"), column1, 120)"

PRINT @q
EXEC sp_executesql @q 

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 2022-08-09
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多