【问题标题】:sql how to cast a select querysql如何强制选择查询
【发布时间】:2012-08-12 22:31:19
【问题描述】:

是否可以将强制转换函数应用于选择语句?如果是,如何?我有一个返回一个数字的查询,我必须使用一个字符串从另一个表中获取其他信息。

【问题讨论】:

  • 哪个数据库系统? SQL SERVER、MySQL 等。
  • 很好的问题。精炼到位。获得合理答案的足够信息 - 即使没有特定数据库服务器的细节,或者您是否询问 SQL(这将是一个合理的假设)。正是我想要的。
  • 如果在使用 ORDER BY CAST(fieldname as INT) 时出现错误

标签: sql sql-server-2008


【解决方案1】:

你就这样CAST()

SELECT cast(yourNumber as varchar(10))
FROM yourTable

那么如果你想JOIN基于它,你可以使用:

SELECT *
FROM yourTable t1
INNER JOIN yourOtherTable t2
    on cast(t1.yourNumber as varchar(10)) = t2.yourString

【讨论】:

  • 与 ORDER BY CAST(fieldname as INT) 一起使用时出错
  • @VipulHadiya 如果你有新问题,那么ask one
  • @blufeet 不,我得到了解决方案。 CAST 总是给我错误,但如果我使用 (columnName*1) 它会将字符串转换为浮点数,这就是我想要的:)
  • 恭喜这也适用于数据帧上的 spark SelectExpression 方法。 df.selectExpr("colA", "colB as newName", "cast(colC as int)")
【解决方案2】:

是的,你可以做到。

CAST 的语法:

CAST ( expression AS data_type [ ( length ) ] )

例如:

CAST(MyColumn AS Varchar(10))

CAST in SELECT 声明:

Select CAST(MyColumn AS Varchar(10)) AS MyColumn
FROM MyTable

更多信息请查看CAST and CONVERT (Transact-SQL)

【讨论】:

  • 虽然问题说明了 SQL Server 2008,但我在 mysql 中尝试了类似的事务,但发现 varchar 对 mysql 的强制转换是无效的数据类型,请参见:stackoverflow.com/a/15368838/1815624
【解决方案3】:

我将此问题解释为在子查询上使用强制转换。是的,你可以这样做:

select cast((<subquery>) as <newtype>)

如果这样做,则需要确保返回一行和一个值。而且,由于它返回一个值,您可以将转换放在子查询中:

select (select cast(<val> as <newtype>) . . .)

【讨论】:

    【解决方案4】:

    如果您使用的是 SQL(您没有说):

    select cast(column as varchar(200)) from table 
    

    你可以在任何语句中使用它,例如:

    select value where othervalue in( select cast(column as varchar(200)) from table)
    from othertable
    

    如果你想做一个连接查询,答案已经在另一个帖子里了:)

    【讨论】:

      【解决方案5】:

      当你使用案例时:

      CASE
      WHEN TB1.COD IS NULL THEN
          TB1.COD || ' - ' || TB1.NAME
      ELSE
          TB1.COD || ' - ' || TB1.NAME || ' - ' || TB.NM_TABELAFRETE
      END AS NR_FRETE,
      

      【讨论】:

      • SQL-Server 不支持按“||”连接
      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多