Tôi gặp sự cố khi sao chép hàm mod trong SQL sever.Mod số âm trong SQL giống như excel
Trong excel, mod (-3, 7) = 4. Nhưng trong SQL, -3% 7 = -3
Tôi có sử dụng% sai, hoặc không SQL làm mod khác nhau?
Tôi gặp sự cố khi sao chép hàm mod trong SQL sever.Mod số âm trong SQL giống như excel
Trong excel, mod (-3, 7) = 4. Nhưng trong SQL, -3% 7 = -3
Tôi có sử dụng% sai, hoặc không SQL làm mod khác nhau?
Điều này sẽ cho kết quả là giữa 0 và n - 1 cho cả hai giá trị tích cực và tiêu cực của x:
((x % n) + n) % n
Vâng, modular arithmetic được thực hiện trên equivalence classes của số nguyên, vì vậy không Excel hay bất kỳ RDBMS là "làm %
sai". Nếu bạn muốn có một đại diện từ 0 đến 6, tuy nhiên, bạn luôn có thể làm
select (-3 % 7) + 7;
Vấn đề duy nhất là, nếu giá trị của tôi bằng 0, tôi cần kết quả là 0 –
Đợi, vì vậy bạn có cặp số nguyên 'm' và' n' sao cho 'm' là đồng dư với 0 mod 'n', nhưng' select m% n' đang trả về cái gì đó khác 0 –
@JackManey: Câu trả lời của bạn trong '(m% n) + n', điều này cho' (0% n) + n = n' trong đó OP muốn nó bằng '0'. Đó là một tập hợp các lý do tại sao câu trả lời của MarkByers có thêm '% n'. – MatBailie
Dám được ngu si đần độn (và muộn cho bữa tiệc).
declare @Modulus as Int = 7
declare @Samples as Table (Value Int)
insert into @Samples (Value) values (-12), (-3), (0), (3), (13), (70)
select Value,
case Sign(Value)
when 1 then Value % @Modulus
when -1 then Value % @Modulus + @Modulus
else 0
end as Modulus
from @Samples
Công cụ này vượt quá đầu tôi, nhưng nó hoạt động. Cảm ơn! –
Bạn tôi vừa mới chỉ ra rằng một phiên bản ngắn hơn sẽ là (n + x)% n –
@TomHalladay: Nó hoạt động với x> = -n nhưng vẫn sẽ cho kết quả âm tính với x <-n. –