অন্য ক্ষেত্রের সাথে সময়ের সাথে একটি ক্ষেত্রের তারিখ কীভাবে একত্রিত করতে হয় - এমএস এসকিউএল সার্ভার


198

আমি যে এক্সট্র্যাক্টের সাথে কাজ করছি তার সাথে আমার 2 টি রয়েছে datetime টি কলাম রয়েছে। একটি কলামে তারিখগুলি এবং অন্যটি প্রদর্শিত হিসাবে সংরক্ষণ করে।

এই দুটি ক্ষেত্রকে 1 টি কলামের টাইপের সাথে সংযুক্ত করতে আমি কীভাবে টেবিলটি জিজ্ঞাসা করতে পারি datetime?

তারিখ

2009-03-12 00:00:00.000
2009-03-26 00:00:00.000
2009-03-26 00:00:00.000

টাইমস

1899-12-30 12:30:00.000
1899-12-30 10:00:00.000
1899-12-30 10:00:00.000

উত্তর:


252

আপনি কেবল দুটি যোগ করতে পারেন।

  • যদিTime part আপনার এর Dateকলাম সবসময় শূন্য
  • এবংDate part আপনার এর Timeকলাম সবসময় শূন্য হয় (বেস তারিখ: জানুয়ারী 1, 1900)

তাদের যুক্ত করা সঠিক ফলাফল দেয়।

SELECT Combined = MyDate + MyTime FROM MyTable

যুক্তি (এডিকো / ডোনোলান থেকে কুডোস)

ডেটটি 4-বাইট হিসাবে Integersবাম 4-বাইট হ'ল dateএবং ডান 4-বাইট হ'ল এইভাবে কাজ করে time। এটি করার মতো$0001 0000 + $0000 0001 = $0001 0001

নতুন এসকিউএল সার্ভার ২০০৮ প্রকার সম্পর্কিত সম্পাদনা করুন

Dateএবং Timeপ্রকারভেদ করা হয় SQL Server 2008। আপনি যোগ করার জন্য জেদ থাকলে, আপনি ব্যবহার করতে পারেনCombined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)

এসকিউএল সার্ভার ২০০৮ এবং তারপরে নির্ভুলতার ক্ষতি সম্পর্কিত সম্পাদনা 2 (মার্টিন স্মিথের কাছে)

এসকিউএল সার্ভারে ডেটটাইম 2- তে কীভাবে তারিখ এবং সময় একত্রিত করতে হয় তা একবার দেখুন ? এসকিউএল সার্ভার ২০০৮ এবং তার বেশি ব্যবহার করে যথাযথতা ক্ষতি রোধ করতে।


2
@ জনের, তারিখ কলামের সময় উপাদান এবং সময় কলামের তারিখ উপাদান উভয়ই শূন্যের সাথে এটি সত্য।
লুক এইচ

1
আপনি সম্ভবত এখানে সংকলিত google.be/group/… বোরল্যান্ড * যা লেখক% 3A টিমবাবি * # 1ab62659d8be3135
লিভেন

2
এসকিউএল সার্ভারে "শূন্য" তারিখটি 1900-01-01, না?
অ্যান্ড্রি এম

1
যখন আমি এটি চেষ্টা করেছি তখন আমার 'সময়' মানটি ডেটটাইমে কাস্ট করার দরকার পড়েনি। অন্য কথায় আপনি করতে পারেন: ডেটটাইম + সময়
স্যাম

1
এসকিউএল সার্ভারে @dnolan তারিখগুলি সংরক্ষণ করা হয় না float। পৃথিবীতে আপনি কোথায় এটি শিখলেন? তারা হিসেবে সংরক্ষণ করা হয় পূর্ণসংখ্যার : তারিখ অংশ একটি নোঙ্গর তারিখ থেকে দিনের সংখ্যা, এবং সময় অংশ মধ্যরাত্রি থেকে "এঁটেল পোকা" র সংখ্যা, 1/300 s হিসেবে জন্য সংজ্ঞায়িত হচ্ছে এঁটেল পোকা datetimeএবং জন্য আরও ভালো timeএবং datetime2
এরিক

129

আপনার তারিখ কলামের সময় উপাদান যদি এবং আপনার সময় কলামের তারিখ উপাদান উভয় শূন্য তারপর Lieven এর উত্তর কি আপনি প্রয়োজন। যদি আপনি গ্যারান্টি দিতে না পারেন যে সর্বদা এটিই হয়ে থাকে তবে এটি কিছুটা জটিল হয়ে যায়:

SELECT DATEADD(day, 0, DATEDIFF(day, 0, your_date_column)) +
    DATEADD(day, 0 - DATEDIFF(day, 0, your_time_column), your_time_column)
FROM your_table

উত্তরের জন্য ধন্যবাদ লুক। ভাগ্যক্রমে, এই ক্ষেত্রে আমি গ্যারান্টি দিতে পারি যে অন্যান্য আইটেমগুলি সর্বদা শূন্য, আমি মনে করি যে 2 টি ক্ষেত্রগুলি 3 য় পক্ষের কোডটি অন্যদিকে 1ও হতে পারে যা আমাদের জন্য নিষ্কাশন করে।
জন উইনস্টলি

6
অপরিবর্তিত অংশগুলি কখনই শূন্য নয় জেনে আমি ওপি-তে একই সমস্যা পেয়েছি। এটি অত্যাবশ্যকভাবে কার্যকর হয়েছে, যদি আমি আপনাকে দুবার ভোট দিতে পারতাম!

এই আমাকে বাঁচায়! আমি উভয়কে চরগুলিতে রূপান্তর করছিলাম এবং তারপরে উপসংহারে এবং তারপরে DATETIME এ ফিরে এসেছি, তবে তারপরে আমি এটিকে সূচী করতে পারিনি, কারণ এসকিউএল বলেছিল এটি অ-সংঘবদ্ধ minist এটি আপাতদৃষ্টিতে নির্দোষ !!! ধন্যবাদ !!! আপনি !!!
ইডিলন

4
আপনার এসকিউএল সার্ভার 2008 সংস্করণটি কাজ করে না। The data types datetime and time are incompatible in the add operator.
মার্টিন স্মিথ

@ মার্টিন: আমি ভাঙা এসকিউএল ২০০8 সংস্করণটি সরিয়েছি।
লুক এইচ

26

কোনও বিকল্প রূপান্তর ছাড়াই এটি একটি বিকল্প সমাধান:

DATEADD(ms, DATEDIFF(ms, '00:00:00', [Time]), CONVERT(DATETIME, [Date]))

আপনি কেবল এইভাবে মিলিসেকেন্ডের নির্ভুলতা পাবেন তবে এটি সাধারণত ঠিক be আমি এসকিউএল সার্ভার 2008 এ এটি পরীক্ষা করেছি have


14

এটি আমার পক্ষে কাজ করেছে

CAST(Tbl.date as DATETIME) + CAST(Tbl.TimeFrom AS TIME)

(এসকিউএল ২০০৮ আর 2 এ)


1
SQL সার্ভার মধ্যে কাজ করে মহান 2008.
Tobias

7
আমি পাই ডেটা টাইপ এবং তারিখের সময় অ্যাড অপারেটরের সাথে বেমানান। এসকিউএল সার্ভারে ত্রুটি 2012
ডেভিন প্রিজ্যান

4
এসকিউএল ২০১২ ডেটা টাইপ এবং
তারিখের

3
এটি আর এসকিউএল সার্ভারে কাজ করে না 2012 এবং উপরের (ব্রেকিং পরিবর্তন)। বিশদ জানতে এখানে দেখুন: social.msdn.microsoft.com/forums/azure/en-US/…
হেইনজি

10

আপনি যদি এসকিউএল সার্ভার ২০০৮ ব্যবহার করেন না (যেমন আপনার কেবল একটি ডেটটাইম ডেটা টাইপ রয়েছে), আপনি যা চান তা অর্জন করতে আপনি নিম্নলিখিত (স্বীকারোক্তভাবে রুক্ষ এবং প্রস্তুত) টিএসকিউএল ব্যবহার করতে পারেন:

DECLARE @DateOnly AS datetime
DECLARE @TimeOnly AS datetime 

SET @DateOnly = '07 aug 2009 00:00:00'
SET @TimeOnly = '01 jan 1899 10:11:23'


-- Gives Date Only.
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly))

-- Gives Time Only.
SELECT DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly)

-- Concatenates Date and Time parts.
SELECT
CAST(
    DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly)) + ' ' +
    DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly)           
as datetime)

এটি মোটামুটি এবং প্রস্তুত, তবে এটি কার্যকর!


9
  1. যদি আপনার উভয় ক্ষেত্রই তারিখের সময় হয় তবে কেবল সেগুলি যুক্ত করা কার্যকর হবে।

    উদাহরণ:

    Declare @d datetime, @t datetime
    set @d = '2009-03-12 00:00:00.000';
    set @t = '1899-12-30 12:30:00.000';
    select @d + @t
  2. আপনি যদি তারিখ এবং সময় ডেটাটাইপ ব্যবহার করেন তবে কেবল সময় তারিখের সময় দিন

    উদাহরণ:

    Declare @d date, @t time
    set @d = '2009-03-12';
    set @t = '12:30:00.000';
    select @d + cast(@t as datetime)

3

ডেটটাইম ক্ষেত্রে সঞ্চিত প্রথম তারিখটিকে একটি স্ট্রিংয়ে রূপান্তর করুন, তারপরে একটি ডেটটাইম ফিল্ডে সঞ্চিত সময়টিকে স্ট্রিংয়ে রূপান্তর করুন, দুটি সংযোজন করুন এবং সমস্ত পরিচিত রূপান্তর ফর্ম্যাট ব্যবহার করে একটি ডেটটাইম ফিল্ডে ফিরে রূপান্তর করুন।

Convert(datetime, Convert(char(10), MYDATETIMEFIELD, 103) + ' ' + Convert(char(8), MYTIMEFIELD, 108), 103) 

3
স্ট্রিংতে রূপান্তর করা তারিখ সংযোজনের চেয়ে ধীর। stackoverflow.com/questions/2775/...
ErikE

2

উপরে বর্ণিত হিসাবে আমার অনেক ত্রুটি ছিল তাই আমি এটি এটি করেছি

try_parse(concat(convert(date,Arrival_date),' ',arrival_time) as datetime) AS ArrivalDateTime

এটা আমার জন্য কাজ করেছে।


2

উভয় ক্ষেত্রকে DATETIME এ রূপান্তর করুন:

SELECT CAST(@DateField as DATETIME) + CAST(@TimeField AS DATETIME)

এবং আপনি যদি Getdate()প্রথমে এটি ব্যবহার করেন :

DECLARE @FechaActual DATETIME = CONVERT(DATE, GETDATE());
SELECT CAST(@FechaActual as DATETIME) + CAST(@HoraInicioTurno AS DATETIME)

1
DECLARE @Dates table ([Date] datetime);
DECLARE @Times table ([Time] datetime);

INSERT INTO @Dates VALUES('2009-03-12 00:00:00.000');
INSERT INTO @Dates VALUES('2009-03-26 00:00:00.000');
INSERT INTO @Dates VALUES('2009-03-30 00:00:00.000');

INSERT INTO @Times VALUES('1899-12-30 12:30:00.000');
INSERT INTO @Times VALUES('1899-12-30 10:00:00.000');
INSERT INTO @Times VALUES('1899-12-30 10:00:00.000');

WITH Dates (ID, [Date])
AS (
    SELECT ROW_NUMBER() OVER (ORDER BY [Date]), [Date] FROM @Dates
), Times (ID, [Time])
AS (
    SELECT ROW_NUMBER() OVER (ORDER BY [Time]), [Time] FROM @Times
)
SELECT Dates.[Date] + Times.[Time] FROM Dates
    JOIN Times ON Times.ID = Dates.ID

ছাপে:

2009-03-12 10:00:00.000
2009-03-26 10:00:00.000
2009-03-30 12:30:00.000


0

কাস্ট কাস্ট করুন (ক্যাসেট (তারিখ অনুসারে ডেটফিল্ড) ডেটটাইম হিসাবে) + কাস্ট (কাস্ট (সময়মতো @ টাইমফিল্ড)) ডেটটাইম হিসাবে)


0

আরেকটি উপায় হ'ল এটি ব্যবহার করার জন্য আপনার সচেতন হওয়া CONCATএবং CASTসচেতন হওয়া DATETIME2(x)। আপনি কোনও নির্ভুল ক্ষতির অর্থ যার xমধ্যে কিছু সেট করতে পারেন set0-7 7

DECLARE @date date = '2018-03-12'
DECLARE @time time = '07:00:00.0000000'
SELECT CAST(CONCAT(@date, ' ', @time) AS DATETIME2(7))

রিটার্নস 2018-03-12 07:00:00.0000000

এসকিউএল সার্ভার 14 এ পরীক্ষিত


-1

তারিখের সময় কলাম থেকে তারিখ এবং অন্য একটি ডেটটাইম কলাম থেকে সময় একত্রিত করতে এটি আপনার পক্ষে সেরাতম সমাধান:

select cast(cast(DateColumn as date) as datetime) + cast(TimeColumn as datetime) from YourTable

ত্রুটিতে ফলাফল "ডেটা টাইপের সময়কাল এবং সময় অ্যাড অপারেটরের সাথে বেমানান।"
ওসকার বার্গগ্রেন

-1

আমি একই পরিস্থিতিতে ছুঁড়েছি যেখানে আমাকে তারিখ এবং সময় ক্ষেত্রগুলি ডেটটাইম ক্ষেত্রে একীভূত করতে হয়েছিল। উল্লিখিত সমাধানগুলির কোনও কাজই নয়, বিশেষ করে এই 2 টি ক্ষেত্র যুক্ত করার জন্য ডেটা টাইপ হিসাবে দুটি ক্ষেত্র বিশেষভাবে যুক্ত করা এক নয়।

আমি সমাধানের নীচে তৈরি করেছি, যেখানে আমি তারিখে ঘন্টা এবং তার পরে মিনিটের অংশ যুক্ত করেছি। এটি আমার জন্য সুন্দরভাবে কাজ করেছে। দয়া করে এটি পরীক্ষা করে দেখুন এবং আপনি কোনও সমস্যার মধ্যে পড়লে আমাকে জানান know

; টিবিএল হিসাবে (স্ট্যাটাসটাইম = '12 / 30/1899 5:17:00 পিএম 'নির্বাচন করুন, স্থিতিপত্র =' 7/24/2019 12:00:00 এএম ') তারিখটি নির্বাচন করুন (এমআই, তারিখ পার্ট (মিনিট, কাস্ট (টিবিএল) স্ট্যাটাসটাইম এএস টাইম)), টিবিএল থেকে তারিখ (এইচ এইচ, তারিখ পার্ট (আওয়ার, কাস্ট (টিবিএল.স্যাটাসটাইম হিসাবে সময় হিসাবে))), ক্যাসেট (tbl.StatusDate হিসাবে DATETIME))

ফলাফল: 2019-07-24 17: 17: 00.000

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.