1

我已经写了这个过程

   alter proc vencedata (@inicio smalldatetime)as
   select idconta,vencimento,pagamento,historico,original,formpagto,planoconta,clifor 
   from financeiro where vencimento >=  @inicio

vencimento(smalldatetime) 列的格式为 mm/dd/yyyy proc 以这种格式工作

  vencedata '03/28/2013' (mm/dd/yyyy)

但是@inicio 的日期在 dd/mm/yyyy 我需要 proc 工作 vencedata '28/03/2013'

我尝试过转换,但我写得不对,谢谢任何方向

4

4 回答 4

3

CONVERT与样式参数一起使用

从 VARCHAR 获取 SMALLDATETIME

-- From Europe style varchar
DECLARE @d1 VARCHAR(20) = '28/03/2013'
SELECT CONVERT(smalldatetime, @d1, 103)
-- From American style varchar
DECLARE @d2 VARCHAR(20) = '03/28/2013'
SELECT CONVERT(smalldatetime, @d2, 101)

在这两种情况下,输出都是

2013-03-28 00:00:00

反之亦然,从 SMALLDATETIME 到 VARCHAR

DECLARE @d3 SMALLDATETIME = '2013-03-28'
-- To Europe style
SELECT CONVERT(VARCHAR(20), @d3, 103)
-- To American style 
SELECT CONVERT(VARCHAR(20), @d3, 101)

输出

28/03/2013
03/28/2013
于 2013-02-25T21:13:36.947 回答
1

日期,日期时间没有您所说的格式,但您的问题是服务器无法将您的dd/mm/yyyy格式字符串转换为smalldatetime.

如果日期以字符串dd/mm/yyyy格式传递,最好将其转换为ISO 格式( yyyymmdd),然后在传递给存储过程之前转换为 smalldatetime。

declare @inicio varchar(20) = '28/03/2013',
        @inicio_date smalldatetime

select @inicio_date = convert(smalldatetime,
               right(@inicio,4) + right(left(@inicio,5),2) + left(@inicio,2))

执行存储过程如下;

exec vencedata @inicio_date

转换的小提琴演示

于 2013-02-25T20:53:25.910 回答
1

尝试这个:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      RAFAŁ :D
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE Esample
AS
BEGIN
    DECLARE @vencedata datetime
    SET @vencedata = convert(datetime, '03/28/2013')
    DECLARE @data datetime
    SET @data = convert(datetime, (Convert(varchar(60),Month(@vencedata))+'/'+Convert(varchar(60),DAY(@vencedata))+'/'++Convert(varchar(60),YEAR(@vencedata))))
    SELECT @data
END
GO
于 2013-02-26T19:21:04.450 回答
0

当与 smalldatetime 进行比较时,C# 将问题的日期转换为 datetime 的 00:00:00

  string inicio = dateTimePicker1.Value.ToShortDateString();
  string fim = dateTimePicker2.Value.ToShortDateString(); 
  DateTime Dinicio = Convert.ToDateTime(inicio); 
  DateTime Dfinal =  convert.ToDateTime(fim);
           Decimal Svt = minaf.TData(Dinicio, Dfinal); 
           DataTable llena3 = minaf.cargrid3(Dinicio,Dfinal);

诀窍是转换为短日期字符串。

于 2013-02-27T19:14:47.427 回答