Lỗi ko sử dụng hàm thời gian trong sql năm 2024

Thực tế thì lỗi này vẫn còn xảy ra khá phổ biến trong các bài viết, trang diễn đàn chia sẻ sau nhiều năm xuất hiện của JDBC, ngay cả khi nó là 1 điều đơn giản để nhớ và hiểu. Có vẻ như 1 số nhà phát triển không sử dụng PreparedStatements vì 1 số lý do dưới đây:

  • Họ không hiểu về PreparedStatements
  • Họ nghĩ rằng sủ dụng PreparedStatements sẽ chậm hơn.
  • Sử dụng PreparedStatements sẽ tốn nhiều effort hơn.

Đầu tiên, chúng ta cần phá bỏ những suy nghĩ trên. Bởi vì theo ước tính thì trên 96% các trường hợp, sử dụng PreparedStatements tốt hơn static statment. Lý do là:

  • Bạn có thể loại bỏ đợc lỗi cú pháp khi nối chuỗi rằng buộc các giá trị.
  • Bạn có thể loại bỏ được các câu lệnh SQL injection từ việc nối chuối các ràng buộc giá trị.
  • Bạn có thể tránh được các trường hợp thêm nhiều loại dữ liệu tinh vi như TIMESTAMP, dữ liệu nhi phân...
  • Bạn có thể tiếp tục mở PreparedStatements trong một khoảng thời gian, sử dụng chúng với các giá trị ràng buộc mới thay vì đóng chúng ngay lập tức (ví dụ như trong Postgres).
  • Bạn có thể sử dụng chia sẻ con trỏ thích ứng (Oracle-speak) trong các cơ sở dữ liệu phức tạp hơn. Điều này giúp ngăn chặn các câu lệnh SQL phân tích cú pháp cho mỗi tập hợp các giá trị ràng buộc mới.

Tuy nhiên trong 1 số trường hợp nhất định, bạn vẫn có thể sử dụng inline bind values (rằng buộc nội tuyến) khi viết các rằng buộc điều kiện cho câu lệnh SQL, với các trường giá trị được quy định là hàng số. Ví dụ:

  • ACTIVE = true
  • DELETED = 1

Vậy giải pháp đưa ra là:

  • Mặc định, luôn luôn nghĩ đến việc sử dụng câu lệnh PreparedStatements thay thế cho câu lệnh static statement. Và đặc biệt không sử dụng cộng chuỗi điều kiện các variable để tránh SQL injection.

2. Trả về quá nhiều cột.

Lỗi này là khá thường xuyên và có thể dẫn đến giảm hiệu suất trong quá trình truy vấn cơ sở dữ liệu ứng dụng của bạn . Hãy nhìn vào 2 hiệu ứng làm giảm effect của ứng dụng khi select all quá nhiều cột.

DATEADD trong SQL là một hàm quan trọng, cho phép thêm hoặc trừ một số đơn vị thời gian từ một ngày hoặc giá trị thời gian cụ thể. Điều này cung cấp một cách tiện lợi để thực hiện các tính toán và xử lý dữ liệu liên quan đến ngày tháng trong các truy vấn SQL.

Trong bài viết này, KPIM sẽ khám phá khái niệm và chức năng của hàm DATEADD, cùng với một số ví dụ và ứng dụng phổ biến trong SQL.

Hàm DATEADD(): giải pháp dịch chuyển khoảng thời gian theo ngày, tháng, năm

Hàm đầu tiên mình muốn giới thiệu với mọi người chính là

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0. Có thể nói đây là hàm được cộng đồng Power BI vô cùng ưa chuộng bởi tính linh hoạt và dễ sử dụng của nó.

Hàm

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 trả về một bảng có chứa cột ngày, được dịch chuyển tiến hoặc lùi theo số lượng khoảng thời gian được chỉ định từ các ngày trong bối cảnh hiện tại. Bạn có thể tiến lùi theo ngày, tháng, quý hoặc năm. Hãy cùng quan sát cấu trúc của

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0:

Để sử dụng hàm

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0, bạn sẽ phải đưa vào:

  • Một trường thời gian
          
          Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))  
          
        
    
    4 để sử dụng là ngày bắt đầu
  • Số lượng khoảng thời gian dịch chuyển: 1, 2, ….
  • Xác định khoảng thời gian bạn muốn dịch chuyển (Day, Month, Quarter, Year)

Lãy lấy ví dụ, bạn muốn sử dụng

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 để tính doanh thu của năm ngoái, chúng ta sẽ dùng công thức:

    `
      Total sales 1 year back = CALCULATE([Total Sales], DATEADD('Date'[Date],-1, YEAR))
    `
  
Lỗi ko sử dụng hàm thời gian trong sql năm 2024

Sử dụng

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 để tính doanh thu của năm ngoái,

Sử dụng DATEADD() để so sánh doanh thu giữa các tháng

Giờ hãy thử tính doanh thu của 2 tháng trước tháng hiện tại xem, ta chỉ việc thay đổi khoảng thời gian mà thôi:

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
Lỗi ko sử dụng hàm thời gian trong sql năm 2024

Sử dụng

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 để so sánh doanh thu giữa các tháng

Sử dụng DATEADD() để so sánh doanh thu giữa các quý

Một trong những so sánh hay được đặt ra đó là liệu chúng ta có làm tốt hơn quý trước hay không? Hãy thử tính doanh thu của các tháng so với cùng thời điểm quý trước nhé.

    `
      Total Sales 1 quarter back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 1, QUARTER))
    `
  
Lỗi ko sử dụng hàm thời gian trong sql năm 2024

Sử dụng

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 để so sánh doanh thu giữa các quý

Sử dụng hàm DATEADD() để so sánh giá stock giữa các ngày

Giả sử, bạn đang đầu tư chứng khoán, và muốn tìm hiểu giá cổ phiểu của Tesla và xem xem tình hình cổ phiếu giữa hiện tại với một tuần trước đó,

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 giúp bạn dễ dàng tính và làm điều này. Chúng ta sẽ dùng công thức sau để tính giá cổ phiếu của 7 ngày trước.

    `
      Price a week ago = CALCULATE([Price today],DATEADD(TSLA[Date], – 7, DAY))
    `
  
Lỗi ko sử dụng hàm thời gian trong sql năm 2024

Sử dụng hàm

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 để so sánh giá

Các hàm liên quan và tương tự DATEADD trong SQL

Trong SQL, có nhiều hàm liên quan và tương tự

    `
      Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
    `
  
0 được sử dụng để xử lý và tính toán ngày tháng. Các hàm này cung cấp các khả năng khác nhau để thay đổi, trích xuất và làm việc với thông tin thời gian.

DATEDIFF: Tính số lượng đơn vị thời gian giữa hai ngày

Hàm

    `
      Total Sales 1 quarter back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 1, QUARTER))
    `
  
2 được sử dụng để tính số lượng đơn vị thời gian (như ngày, tháng, năm, giờ, phút, giây) giữa hai ngày. Cú pháp chung của hàm này là:

    `
      DATEDIFF(datepart, startdate, enddate)
    `
  
Ví dụ, để tính số ngày giữa hai ngày, bạn có thể sử dụng:

    `
      SELECT DATEDIFF(day, ‘2023-06-01’, ‘2023-06-08’) AS DayDifference;
    `
  
Kết quả sẽ là 7, vì có 7 ngày giữa ‘2023-06-01’ và ‘2023-06-08’.

DATEPART: Trích xuất thành phần thời gian từ một ngày

Hàm

    `
      Total Sales 1 quarter back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 1, QUARTER))
    `
  
3 được sử dụng để trích xuất một thành phần cụ thể (như năm, tháng, ngày, giờ, phút, giây) từ một ngày hoặc một giá trị thời gian. Cú pháp chung của hàm này là:

Ví dụ, để trích xuất năm từ ngày '2023-06-01', bạn có thể sử dụng:

    `
      SELECT DATEPART(year, ‘2023-06-01’) AS YearValue;
    `
  
Kết quả sẽ là 2023, vì năm của ngày đó là 2023.

GETDATE và CURRENT_TIMESTAMP: Lấy ngày hiện tại

Hai hàm

    `
      Total Sales 1 quarter back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 1, QUARTER))
    `
  
4 và

    `
      Total Sales 1 quarter back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 1, QUARTER))
    `
  
5 được sử dụng để lấy ngày và thời gian hiện tại từ hệ thống. Cả hai hàm này trả về giá trị ngày và thời gian hiện tại theo định dạng chuẩn của hệ thống. Ví dụ:

    `
      SELECT GETDATE() AS CurrentDateTime; 
    `
  
## Ứng dụng DATEADD trong SQL

  • Tính toán ngày tháng: Cho phép bạn thêm hoặc trừ ngày, tháng và năm từ một ngày cụ thể. Ví dụ: tính ngày sinh nhật trong tương lai hoặc tính thời gian trôi qua kể từ một sự kiện quan trọng.
  • Tính toán thời gian: Bạn có thể được sử dụng để thêm hoặc trừ giờ, phút, giây để tính toán thời gian dựa trên một điểm thời gian khác.
  • Tạo chuỗi ngày tháng: Bạn có thể tạo chuỗi ngày tháng bằng cách kết hợp các thành phần của ngày, tháng và năm từ các cột riêng biệt trong cơ sở dữ liệu.
  • Xử lý hạn chế thời gian: DATEADD có thể được sử dụng để tính toán ngày đến hạn hoặc thời gian còn lại từ một ngày bắt đầu và một số đơn vị thời gian nhất định.

Kết luận

Trên đây là một cái nhìn tổng quan về DATEADD trong SQL. Hàm này đóng vai trò quan trọng trong việc xử lý ngày tháng trong SQL Server và cung cấp cho chúng ta khả năng thêm hoặc trừ các đơn vị thời gian từ một ngày hoặc giá trị thời gian cụ thể.

Qua các ví dụ và ứng dụng, chúng ta đã thấy cách sử dụng DATEADD để tính toán tuổi, tính thời gian, tính đến hạn và nhiều hơn nữa. Sử dụng DATEADD giúp chúng ta thực hiện các phép tính và xử lý ngày tháng một cách linh hoạt và tiện lợi trong truy vấn SQL.