【问题标题】:Convert varchar=> Datetime stored procedure转换 varchar=> 日期时间存储过程
【发布时间】:2014-09-07 14:45:04
【问题描述】:

我想将varchar 转换为Datetime 数据类型(DATESX = UDDT,日期时间)。我知道我必须使用什么:

CONVERT(datetime, '@adx_en_cours_etude') 

但我看不到在哪里可以添加此转换功能...

DECLARE @return_value int

EXEC    @return_value = [dbo].[ps_ListingElem]
    @aid_cdi = 5058,
    @adx_en_cours_etude  = '2007-05-23 00:00:00.000'

SELECT  'Return Value' = @return_value
GO


/*My stored procedure :*/
ALTER  PROCEDURE [dbo].[ps_ListingElem]
    @aid_cdi ID, /* uddt */
    /* (DATESX = User defined datatype = datetime type)  */
    @adx_en_cours_etude  DATESX,    
AS
BEGIN
  SELECT
    pc_sup.dt_deb,
    pc_sup.dt_fin,
    pc_sup.id_type_produit,
  FROM     pc_sup
    INNER JOIN type_prod ON pc_sup.id_type_prod = type_prod.id_type_prod
    INNER JOIN cdi_type_prod ON type_prod.id_type_prod = cdi_type_prod.id_type_prod

  WHERE   cdi_type_prod.id_cdi = @aid_cdi
      AND   (@adx_en_cours_etude IS NULL 
      OR    pc_sup.dt_deb <= @adx_en_cours_etude  
      AND   pc_sup.dt_fin >= @adx_en_cours_etude ) 
END

【问题讨论】:

  • 这些数据类型是什么?您使用的是什么 DBMS? ID 和 DATESX 不是标准的 SQL Server 数据类型。
  • MS Management Studio (SQL Server 2005) ID 和 DATESX = 用户定义的数据类型都
  • 你试过我的答案了吗?让我知道它是否有效或需要一些调整。

标签: sql sql-server tsql sql-server-2005


【解决方案1】:

假设pc_sup.dt_deband pc_sup.dt_fin都是日期时间

DECLARE @return_value int

EXEC    @return_value = [dbo].[ps_ListingElem]
    @aid_cdi = 5058,
    @adx_en_cours_etude  = '2007-05-23 00:00:00.000'

SELECT  'Return Value' = @return_value

/*My stored procedure :*/

ALTER  PROCEDURE [dbo].[ps_ListingElem]
@aid_cdi ID, /* uddt */
/* (DATESX = User defined datatype = datetime type)  */
@adx_en_cours_etude  DATESX,    

AS
BEGIN
  SELECT
    pc_sup.dt_deb,
    pc_sup.dt_fin,
    pc_sup.id_type_produit,
  FROM     pc_sup
    INNER JOIN type_prod ON pc_sup.id_type_prod = type_prod.id_type_prod
    INNER JOIN cdi_type_prod ON type_prod.id_type_prod = cdi_type_prod.id_type_prod

  WHERE   cdi_type_prod.id_cdi = @aid_cdi
      AND   (CONVERT(DATETIME, @adx_en_cours_etude) IS NULL 
      OR    pc_sup.dt_deb <= CONVERT(DATETIME, @adx_en_cours_etude)  
      AND   pc_sup.dt_fin >= CONVERT(DATETIME, @adx_en_cours_etude) ) 

END

【讨论】:

    【解决方案2】:

    你指的是EXEC语句吗?

    EXEC    @return_value = [dbo].[ps_ListingElem]
                             @aid_cdi = 5058,
                             @adx_en_cours_etude  = '2007-05-23 00:00:00.000'
    

    您不必转换。以字符串 ISO 格式 (YYYY-MM-DD) 指定日期作为您所做的对于 SQL Server 来说很好。您根本不必转换为日期时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2018-09-30
      • 2016-09-16
      • 2019-12-23
      • 2019-03-13
      相关资源
      最近更新 更多