2017-03-03 5 views
0

私はストアドプロシージャを書くのが初めてであるので、ちょっと立ち往生しています。 私は日付でフィルタをかけたいという手順を書いています。私はdatetimeを保存するカラムを持っていますが、datetime値と日付部分を一致させたいだけです。それについてどうすればいいですか?これはこれまで私が試したことです。 私はdatetime型のtrxdateという列を持っています。SQL Serverのストアドプロシージャのフィルタ日付ですか?

USE [CAFFE] 
GO 
/****** Object: StoredProcedure [dbo].[p_paymentrecordsbydateandpaymentmode] Script Date: 3/3/2017 11:32:19 AM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER Procedure [dbo].[p_paymentrecordsbydateandpaymentmode] 
(
    @Country  VARCHAR(20), 
    @BankID   VARCHAR(20), 
    @ModeOfPayment VARCHAR(20), 
    @TrxDate  datetime 
) 
AS 
    SELECT  
     MobileNumber, 
     ModeOfPayment, 
     Branch, 
     ReceiptNo, 
     Amount, 
     TrxDate 

    FROM tb_TransactionRequests(NOLOCK) 
    WHERE @ModeOfPayment=ModeOfPayment and @TrxDate = CONVERT(VARCHAR(10),TrxDate,111) 

答えて

0

このようなWHERE句変更してみてください。

WHERE @ModeOfPayment=ModeOfPayment and @TrxDate = cast(TrxDate as date) 

とPROCコールが

[dbo].[p_paymentrecordsbydateandpaymentmode] 1,1,'modeOfPayment','20170303' 
+0

@ DmitryCat-私は日付内のレコードを取得することができるように、手順を変更するにはどうすればよいですその日付内にデータを取得しますか? –

+0

私が実際にあなたを理解しているなら、\ @ date1と\ @ date2の間にキャスト(TrxDateを日付として)を試してみる必要があります –

0

のようになります。

@TrxDate  date 
としてプロシージャに引数を渡すが、あなたが実際に必要性をいけませんストアドプロシージャの場合はvarcharに変換するパラメータおよび表のデータベース型はdatetimeです。

ALTER Procedure [dbo].[p_paymentrecordsbydateandpaymentmode] 
(
    @Country  VARCHAR(20), 
    @BankID   VARCHAR(20), 
    @ModeOfPayment VARCHAR(20), 
    @TrxDate  datetime 
) 
AS 
    SELECT  
     MobileNumber, 
     ModeOfPayment, 
     Branch, 
     ReceiptNo, 
     Amount, 
     TrxDate 

    FROM tb_TransactionRequests(NOLOCK) 
    WHERE @ModeOfPayment=ModeOfPayment and @TrxDate = TrxDate 
0

以下のように次のCASTアクションを使用してdatetimeフィールドから日付/時刻を特定することができます

-- Select date 
SELECT CAST(GETDATE() AS DATE); 

-- Select time 
SELECT CAST(GETDATE() AS TIME); 
関連する問題