SQL untuk memisahkan YYYY MM ke tahun fiskal

Saya memiliki kolom yang menyatakan bulan dan tahun YYYY MM. Saya telah memisahkannya menjadi dua kolom (Year dan Month). Soalnya, tahunnya adalah tahun kalender padahal idealnya saya membutuhkan tahun fiskal yang saya gunakan (Apr 01 hingga Mar 31 - Ini tidak akan pernah berubah).

Solusi lain yang saya lihat didasarkan pada format tanggal, sedangkan kolom asli saya adalah string.

Saya memerlukan pernyataan yang mengembalikan tahun fiskal untuk kolom tahun baru saya, bukan tahun kalender.

Pernyataan saya saat ini adalah:

Select Month,
parsename(replace(Month,' ','.'),1) as MonthM,
parsename(replace(Month,' ','.'),2) as Year
FROM TblTrade

Yang berfungsi untuk memisahkan kolom.

Jadi hasil yang diharapkan misalnya: 15 Februari menjadi Februari dan 2015. 15 April menjadi April dan 2016.

Mohon saran.


person Bikkembergs    schedule 27.01.2016    source sumber
comment
Bisakah Anda menambahkan beberapa data sampel, dan hasil yang diharapkan?   -  person jarlh    schedule 27.01.2016
comment
Silakan tambahkan Sistem Anda. (SQL Server, Akses ...)   -  person Nik Bo    schedule 27.01.2016
comment
Duplikat... stackoverflow.com/questions/ 1771995/ dan stackoverflow.com/questions/20554611/ dan stackoverflow.com/questions/12815334/ dan...dan...dan...   -  person Liesel    schedule 27.01.2016
comment
@LesH Saya melihat-lihat banyak utas lainnya tetapi sayangnya saya tidak dapat melihat contoh di mana format aslinya cocok dengan format saya. Oleh karena itu saya tidak dapat menerjemahkan solusi yang diberikan.   -  person Bikkembergs    schedule 27.01.2016
comment
Ini adalah masalah pemrograman sederhana. Jika bulannya Jan, Feb atau Mar, kurangi satu dari tahunnya. Bagian mana yang Anda tidak tahu caranya?   -  person Tab Alleman    schedule 27.01.2016


Jawaban (4)


server sql:

declare @date datetime = getdate();
select 
(YEAR(DATEADD(Month,-((DATEPART(Month,@date)+5) %12),@date))) AS Financial_Year

Dengan asumsi April adalah bulan 1

person Matt    schedule 27.01.2016

Coba ini

    select case 
             when to_char(to_date(column_name,'yyyy mm'),'mm') between 01 and 03 
                  then to_char(trunc(to_date(column_name,'yyyy mm')),'yyyy')-1
             else to_number(to_char(trunc(to_date(column_name,'yyyy mm')),'yyyy')) end 
    fiscal_year
    from table_name

Saya menggunakan Oracle db Ini akan berfungsi ketika kolom berupa string dan memiliki data yang valid yaitu tanggal dalam format seperti yyyy mm

person Narasimha Maiya    schedule 27.01.2016

Karena Anda telah membaca artikel-artikel lain tersebut (Anda harus benar-benar menyebutkan penelitian apa yang telah Anda lakukan dalam pertanyaan Anda) dan Anda masih mengalami masalah, saya punya permainan untuk Anda.

Jika saya mengerti dengan benar, Anda memiliki varchar dengan YYYY MM misalnya

2015 01
2015 02
2015 03
2015 04

dll Dan Anda ingin

Jan 2014
Feb 2014
Mar 2014
Apr 2015

Ini dia...

Siapkan beberapa data pengujian

    DROP TABLE IF EXISTS #Test;

    WITH Dates AS (
        SELECT CAST(GETDATE() AS DATE) AS Date
        UNION ALL
        SELECT DATEADD(MONTH, -1, Date) FROM Dates
        WHERE Date > '20140101'
    )
    SELECT DISTINCT
        CONVERT(VARCHAR(4), YEAR(Date)) + ' ' +RIGHT(CONVERT(VARCHAR(6), Date, 112), 2) YearMonth
    INTO #Test 
     FROM Dates
    OPTION (MAXRECURSION 0);

    SELECT * FROM #Test

YearMonth
---------
2013 12
2014 01
2014 02
2014 03
2014 04
2014 05
etc

Temukan Tahun Anggaran

    SELECT 
        LEFT(YEARMONTH, 4) Year
        ,RIGHT(YEARMONTH, 2) Month
        ,LEFT(DATENAME(MONTH , DateAdd( month , CONVERT(INT,RIGHT(YEARMONTH, 2)) , -1 )), 3) MonthName
        ,IIF(CONVERT(INT, RIGHT(YEARMONTH, 2)) >= 4, CONVERT(INT,LEFT(YEARMONTH, 4)), CONVERT(INT,LEFT(YEARMONTH, 4)-1 )) FiscalYear
    FROM #TEST

    Year Month MonthName FiscalYear
    ---- ----- --------- -----------
    2013 12    Dec       2013
    2014 01    Jan       2013
    2014 02    Feb       2013
    2014 03    Mar       2013
    2014 04    Apr       2014
    2014 05    May       2014
    2014 06    Jun       2014
    etc

Anda dapat memasukkan penguraian tahun/bulan dalam sub kueri hanya untuk membuat kode lebih bersih dan beberapa format buruk dapat diganti dengan FORMAT karena Anda menggunakan tahun 2012.

Semoga ini yang Anda cari dan membantu.

person Liesel    schedule 27.01.2016

Karena Anda menyertakan tag Tableau, saya akan menjelaskan pendekatan Tableau -- yang sedikit berbeda dari jawaban lain karena Anda cenderung menentukan apa yang Anda inginkan ke Tableau, dan membiarkan drivernya menghasilkan SQL yang diperlukan untuk database Anda.

Pertama, ini akan berfungsi paling baik jika Anda memiliki satu bidang yang memiliki tipe data DATE, bukan bidang terpisah untuk bulan dan tahun.

Anda kemudian dapat menggabungkan tanggal ke tahun, bulan, hari terdekat, dll (sebenarnya memotong ke awal periode) atau mengekstrak bagian tertentu dari tanggal tahun, bulan, hari, dll sesuai kebutuhan untuk pengelompokan/tampilan.

Manfaat tambahan bekerja dengan tipe data DATE yang sebenarnya adalah Anda dapat memberi tahu Tableau awal tahun fiskal Anda untuk setiap sumber data, dan itu akan mengurutkan tanggal dengan tepat. Cukup klik kanan pada sumber data dan atur properti tanggal. Anda juga dapat mengatur awal minggu dan format tanggal.

person Alex Blakemore    schedule 28.01.2016