Since I've been called upon, it seems OP already has the screw shape, and a texture and simply wants to map the texture on it, which could be done by converting Polar Coordinate System to UV like so:
- $τ÷12÷2$ is there to offset by half of an hour, because I aligned the start of the spiral to show entire hour 12, but half of this hour's plate resides before the actual 12:00 hour. If you don't care about the start of the spiral because it's not in the view or the setup is animated, then you don't need this "Subtract" node.
- Top Map Range uses $0..τ$ as an input, which means $0..360°$. Normally you'd have to precise $-π..+π$ as input (and then you would need to change the offset in the previous node to offset by an additional 6 hours), but here only the difference between the min and max matters because I set the Image Texture extrapolation to REPEAT .
- This angular coordinate translates to the U (x) position on the UV map.
- Going back to the original coordinate, multiply it by $<1, 1, 0>$ to remove the Z component. This way you can take the distance from the Z axis by using the "Length" node. Finally pass through another Map Range, where I specified inner and outer spiral radii as input, and the V (y) responsible for the numbers as output.
Instead of using Arctan2, you could pass the vector directly to Gradient: Radial, but then you would need to subtract $7\over24$ from it instead (additional $3\over12$ offset because the gradient starts on the left rather than on top, so that's the 3 hours offset) and the map range would have an input of 0..1 range, but reversed (From Min: 1, From Max: 0).
My Spiral I created by defining a single edge from $<0, 4, 0>$ to $<0, 6, 0>$, then rotating it counter-clockwise around Z axis by $360°\over24$ (by now you should understand why), then adding a Screw modifier:
As for the Image Texture, I tried to make it clear in the node tree: one tile is $128×128$ pixels, so I made it one tile high and 12 tiles long. It's important to prepare a texture exactly like this, grid aligned, where each hour plate is centered on $1\over12$ cell of the texture.
Keep in mind using a UV map wouldn't work the same way due to linear interpolations not following the curvature; which could be intended, for example if we decrease the resolution to just 12 (one face per hour plate), that's how the current setup looks in Top Orthographic mode:
But if I use geonodes to dynamically assign UV and then in the material replace the maths with "Attribute: UVMap", and then also add a simple subdivision to fix ugly trapezoid triangulation:
Switch subdivision method to Catmull-Clark and we're back where we started [I didn't care to dynamically crease the first edge]:
(Except Subdivision will shrink the spiral a little)
The shader could allow us to do some fancy stuff - for example what if we don't want to stretch the numbers?